——前阵子爬了Steam,选择中文显示,但还是有一个抓取下来的字段时中时英,所以顺道写了一个调用有道翻译的接口,用来对抓取来的数据做翻译,调用该函数时,如果对象是中文,会被翻译成英文,如果是英文,则会翻译成中文。
——如果只需要翻译英文的话,可以写一个如为英文才调用翻译接口的判断。
——下面讲讲有道翻译接口建立的过程。
#coding = utf-8 import requests url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' payload = {'i':'hello', 'action':'FY_BY_CLICKBUTTION', 'bv':'e2a78ed30c66e16a857c5b6486a1d326', 'client':'fanyideskweb', 'doctype':'json', 'from':'AUTO', 'keyfrom':'fanyi.web', 'salt':'15532627491296', 'sign':'ee5b85b35c221d9be7437297600c66df', 'smartresult':'dict', 'to':'AUTO', 'ts':'1553262749129', 'typoResult':'false', 'version':'2.1' } r = requests.post(url,data=payload) #post请求,并提交表单数据 trans_json = r.json() #由F12能看出返回的数据是json格式,但python不知道,所以这边定义了返回来的数据为json格式,方便之后操作 print(trans_json) #打印看返回来的数据对不对
但是打印结果却是 {‘errorCode’: 50}
一开始以为是没加header的关系,但是经过检验,发现可能是有道为了防止接口被调用,在url做了手脚,
正确的接口地址应该是:http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
也就是吧_o去掉即可,我们看下运行结果。
trans_tgt = trans_json['translateResult'][0][0]['tgt'] #中文 trans_src = trans_json['translateResult'][0][0]['src'] #英文
完整源代码:
#coding = utf-8 import requests def Trans(str): url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' payload = {'i':str, 'action':'FY_BY_CLICKBUTTION', 'bv':'e2a78ed30c66e16a857c5b6486a1d326', 'client':'fanyideskweb', 'doctype':'json', 'from':'AUTO', 'keyfrom':'fanyi.web', 'salt':'15532627491296', 'sign':'ee5b85b35c221d9be7437297600c66df', 'smartresult':'dict', 'to':'AUTO', 'ts':'1553262749129', 'typoResult':'false', 'version':'2.1' } r = requests.post(url,data=payload) trans_json = r.json() #返回结果定义为json trans_tgt = trans_json['translateResult'][0][0]['tgt'] #中文 trans_src = trans_json['translateResult'][0][0]['src'] #英文 if str == trans_tgt: #如果str为中文,则返回英文,反之 return trans_src else: return trans_tgt