- 通过有道在线翻译页面的请求接口,利用post实现翻译小程序
- 通过浏览器测试获取数据请求的链接
import urllib.request
import urllib.parse
import json
key = input('请输入您想要翻译的文字:')
data = {
'i': key,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '15949097071450',
'sign': '51d443b018a380fed2e86bd67dfbeace',
'ts': '1594909707145',
'bv': '0ea2f265e69dc7094ed5f0b64ef39e0b',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_CLICKBUTTION'
}
data = urllib.parse.urlencode(data)
data = bytes(data,'utf-8')
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
req = urllib.request.Request(url,data,headers=headers)
res = urllib.request.urlopen(req)
html = res.read().decode('utf-8')
result_temp = json.loads(html)
result = result_temp['translateResult'][0][0]
if key == result['src']:
print('您想要翻译的文字:',key)
print('翻译结果是:',result['tgt'])
else:
print('程序出错,请调试')
- 需要注意的几点:
- 1.通过浏览器抓包network测试,获得请求数据格式并构造成字典格式
- 2.urllib.parse.urlencode()需要传入的是字典,可以实现key:value到key=value格式的转换;可以实现汉字到ASCII编码的转换
- 3.post提交的数据是二进制字节流数据,需要进行bytes()的转换
- 4.url请求的网址不一定正确,服务器端可能进行转换,正确的请求网址可以通过观察,然后猜想测试
- 5.返回的json字符串数据需要通过json.load()转换为python格式
- 6.返回值的处理可以通过[key]和切片[]获得最后的数据
- 7.进行传入值key和服务器返回值中的result[‘src’]进行比对,从而及时发现程序错误