原博文地址:https://blog.csdn.net/qq_40962368/article/details/80620817
自从写了上面的博文之后,很多人询问我关于有道翻译接口的问题,为什么不是F12中的
http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
当时,我在面对这个问题时,也是一脸懵逼,进行过很多次猜测,一直没有得出让自己比较满意的理由。
最近我用requests库重写了有道翻译内容的爬虫,依然不能解决这个问题。
偶然的一次更改,将路径中的_o去掉,便可以正确的返回结果,即路径设为
http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
为此,我上网查了很多资料依然没有结果。。。但是从_o的字面意思来看,让我想到了锁。
个人分析:
从返回的结果来看,如果加上_o,就像网站给翻译结果加了一道锁,让我们无法访问翻译返回的结果。
但是,如果去掉_o,就可以正确的返回结果,就像直接绕过了锁,直接返回翻译结果。
对于这个问题,我会持续跟进,如果有什么想法,我会第一时间分享给大家。
再次更新,博文地址:https://blog.csdn.net/qq_40962368/article/details/89097488
上代码:
import requests
import chardet
import json
if __name__ == '__main__':
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
i = input('请输入要翻译的内容:')
data = {
'i': i,
'from': 'AUTO',
'to': 'AUTO',
'doctype': 'json',
'smartresult': 'dict',
'client': 'fanyideskweb',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTIME',
'TypoResult': 'false'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
' AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/73.0.3683.86 Safari/537.36'
}
response = requests.post(url, data=data, headers=headers)
html = response.content # 读取返回的对象
code = chardet.detect(html) # 自行判断编码格式
data = html.decode(code.get('encoding', 'utf-8')) # 解码
json_data = json.loads(data) # 解析载入json数据
print('翻译的结果为:' + json_data['translateResult'][0][0]['tgt'])
运行结果: