python爬虫使用requests库利用百度翻译开发者平台ap

2020-03-26  本文已影响0人  _Mirage

如题, 刚学习了requests的post方法, 现在用百度翻译开发者平台提供的接口来实践下:

首先通过 https://fanyi-api.baidu.com/这个链接进入开发者平台, 点击产品服务:

image.png
进入注册界面完成开发者的注册: image.png

这里有两个版本可供选择:

image.png
一般用来玩玩的选第一个就可以了, 毕竟完全免费.
申请完毕后进入 管理控制台, 可以在里面看到自己的appid和密钥:
image.png
有了这些就可以开始编程了:
1 .首先api地址有两个:
通用翻译API HTTP地址:http://api.fanyi.baidu.com/api/trans/vip/translate
通用翻译API HTTPS地址:https://fanyi-api.baidu.com/api/trans/vip/translate
基本上用哪个都可以, https和http的区别也不是太大, 好像https更安全? 相比于http有个套接字什么的.
  1. 请求数据格式:


    image.png

    这里 get和 post都可以, 推荐使用post

  2. 使用python requests.post 函数发送数据:


    image.png
  3. 处理接收到的数据(json格式, 详细说明在上篇文章):


    image.png
  4. 运行结果 : image.png
    image.png

总的就这些步骤, 不是很复杂.

可能要注意的就是几个python库的使用, 第一个是uuid, 这个库给我们提供了很好的接口去生成salt类型的随机数(当然你直接用random随机数也行, 这个更好): image.png
第二个就是hashlib, 百度翻译开发者api要求我们将数据用MD5算法加密, python给我们实现好的许多跟密码学有关的算法都在hashlib中:
image.png

完整代码如下:

# coding='utf-8'

import requests
import uuid
import hashlib


# 1.创建百度翻译api需要的数据格式
input_key = input('输入待翻译的数据(只支持中英文自动转换):\n')
# 实现中英文互译
data = {
    'q': input_key,
    'from': 'auto',
    'to': 'auto',
    # 百度翻译开发者平台申请
    'appid': '换成自己的appid',
    # 利用python标准库生成标准格式的salt数据
    'salt': str(uuid.uuid4()),
}
# 按指定要求生成签名数据
sign = hashlib.md5((data['appid']+
       data['q']+data['salt']+
       '换成自己的密钥').encode('utf-8'))
# 将bytes类型转化成16进制数据
sign = sign.hexdigest()
data['sign'] = sign

# 2.向百度翻译开发者接口url发送数据,利用post
url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
# 利用requests的特点:即使url或者data中格式即使不是标准
# urlencoded类型, 也可以完成自动转换.
# 永远不要忘记一个合格spider的自我修养: 加user-agent
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
}
response = requests.post(url, headers=headers, data=data)
response_json = response.json()

# 3.处理接收到的json数据
result_list = response_json['trans_result']
result_str = ''
result_len = len(result_list) - 1
for index, each in enumerate(result_list):
    result_str += each['dst']
    if index != result_len:
        result_str += '\n'
print('{}'.format(result_str))

上一篇下一篇

猜你喜欢

热点阅读