原博文地址: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 jsonif __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'])
运行结果: