python版本3.7
主要功能是连接有道翻译进行中英互译(其他语言还没有尝试)
然后,直接贴代码了
import urllib
import urllib.parse
import hashlib
import time
import random
headers = {
'Cookie': 'OUTFOX_SEARCH_USER_ID=-2022895048@10.168.8.76;',
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; rv:51.0) Gecko/20100101 Firefox/51.0',
}
content = input('输入你想翻译的内容')
salt = str(int(time.time() * 1000) + random.randint(0, 10))
client = "fanyideskweb"
AppKey = "ebSeFb%=XZ%T[KZ)c(sy!"
sign = hashlib.md5((client+content+salt+AppKey).encode('utf-8')).hexdigest()
###salt和sign的加密措施
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = salt
data['sign'] = sign
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_REALTIME'
data['typoResult'] = 'false'
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url, data=data, headers=headers)
###利用urllib package 需要加上header,或者可以直接用requests加上header
response = urllib.request.urlopen(req)
text = response.read().decode('utf-8')
###解码,可以将返回数据变为Unicode格式,把中文变回来
#print(text)
infos = json.loads(text)
if 'translateResult' in infos:
try:
yuanwen = infos['translateResult'][0][0]['src']
试试decode的效果
result = infos['translateResult'][0][0]['tgt']
print(yuanwen,'的翻译是',result)
except:
pass
tips:
- 请求需要带上header,直接用的urllib.request.Request(),其他方式如add_header未尝试,也可以直接用requests函数内加上headers
- 请求成功后返回的数据是utf-8编码的,需要解码,然后得到一个json类型的数据格式,使用json.loads()将其转为字典类型。
- 部分实现方案参考了https://blog.csdn.net/qq_26877377/article/details/80550655和http://www.tendcode.com/article/youdao-spider/,还有小甲鱼的python爬虫教程。
- 另外尝试在开头使用代理服务器时出现错误,推测是代理服务器的header冲突或疏漏,留待以后解决。