需求一:通过urllib获取有道翻译。
注意:
1.urllib.parse.urlencode( ),将字典里面所有的键值转化为格式 (key=value&key=value),并且将中文转码(如:KW=%E9%B1%BC&)。
2.bytes( ),所有的post请求提交的数据类型都是字节型数据。
3.响应返回的是json,是Response Header里的Content-Type;application/json; charset=utf-8的原因吗。
4.headers视情况传入。有时headers还必须包含Cookie。
import urllib.request
import urllib.parse
import json
content = input("输入需要翻译的内容:")
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {"i": content,"from": "AUTO","to":"AUTO","smartresult":"dict","client":"fanyideskweb","salt":"15882906784367","sign":"4bd543e74523f498e67e0aa864abb845","ts":"1588290678436","bv":"acc97416ef67184f42e5a4a03c3d52ab","doctype":"json","version":"2.1","keyfrom":"fanyi.web","action":"FY_BY_CLICKBUTTION"}
data = urllib.parse.urlencode(data)
data = bytes(data,'utf-8')
req = urllib.request.Request(url,data=data)
res = urllib.request.urlopen(req)
html = res.read().decode("utf-8")
# 返回:{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":0,"translateResult":[[{"src":"鱼","tgt":"fish"}]]}
html_dict = json.loads(html)
result = html_dict["translateResult"][0][0]["tgt"]
print(result)
需求二:通过Requests获取有道翻译,requests是一个强大的三方库。
1.headers可以视情况加入post()参数中,如果碰到“安全验证”,则需要headers中加入Cookie。
import requests
import json
content = input("输入需要翻译的内容:")
data = {"i": content,"from": "AUTO","to":"AUTO","smartresult":"dict","client":"fanyideskweb","salt":"15882906784367","sign":"4bd543e74523f498e67e0aa864abb845","ts":"1588290678436","bv":"acc97416ef67184f42e5a4a03c3d52ab","doctype":"json","version":"2.1","keyfrom":"fanyi.web","action":"FY_BY_CLICKBUTTION"}
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
res = requests.post(url,data=data) # <class 'requests.models.Response'> <Response [200]>
res.encoding = "utf-8"
html = res.text
html_dict = json.loads(html)
result = html_dict ['translateResult'][0][0]['tgt']
print(result)
就代码而言,requests比urllib少了请求之前的编码,实例化请求。