python调用有道接口和谷歌翻译实现自动翻译及其对比
python调用有道接口
有道会提供接口供开发使用,但是查阅相关开发文档说明,发现是有请求限制,具体是每小时请求1000次,超过将会返回”errorcode 50“,这也是很多同学在使用python调用有道接口时常遇到的,这也是最开始使用有道自动翻译,然后弃坑的原因。 但是还是记录一下如何调用有道接口进行自动翻译,因为比起谷歌翻译,速度上和网络限制上稍微具有优势,如果是数据量很少的情况下可以使用有道翻译,但是翻译的准确与否,本文不做评论。 使用post方法对有道进行请求,本文使用的方法是有爬虫的形式对有道进行访问,而并非申请的有道开发接口,因此要先搞清楚请求中head都有哪些字段。 打开有道翻译随机进行翻译,打开谷歌浏览器开发者工具 根据请求头中的信息构造出相应的head,注意要对cookie进行处理,cookie中的”___rl__test__cookies=“字段是一个时间戳,需要每次请求的时候生成,前面的字段从网页中复制出来即可
head = {
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9',
'Content-Length':"247",
'Connection':'keep-alive',
'Content-Type':'application/json; charset=UTF-8',
'Host':'fanyi.youdao.com',
'Origin':'http://fanyi.youdao.com',
'Referer':'http://fanyi.youdao.com/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
'X-Requested-With':'XMLHttpRequest',
'Cookie': '....(省略,copy自己的cookie);___rl__test__cookies='+str(int(time.time()*1000)+random.randint(1, 10))
}
head有了,接下来就是构造自己的data
data = {
'i': t,
'from':'AUTO',
'to':'AUTO',
'smartresult':'dict',
'client':'fanyideskweb',
'salt':i,
'sign':str_sent,
'doctype':'json',
'version':'2.1',
'keyfrom':'fanyi.web',
'action':'FY_BY_REALTIME',
'typoResult':'false'
}
data中重要的三个参数,分别是”i“,”salt“,”sign“ 其制作如下:
i = str(int(time.time()*1000)+random.randint(1, 10))
t = "The word you want to translate"
u = 'fanyideskweb'
l = 'Y2FYu%TNSbMCxc3t2u^XT'
src = u + t + i + l
m2 = hashlib.md5()
m2.update(src.encode("utf-8"))
str_sent = m2.hexdigest()
可以看出,”i“就是一个时间戳,”t“是你想翻译的句子,”u“和”l“是一个固定字段,”u“是不变的字段,”l“是根据不同电脑生成,具体可以从谷歌网页开发者工具中找到 此时万事具备,就等请求了。 完整代码如下:
import requests
import time
import random
import hashlib
import urllib.request
import urllib.parse
import json
i = str(int(time.time()*1000)+random.randint(1, 10))
t = "please input the word you want to translate:"
u = 'fanyideskweb'
l = 'Y2FYu%TNSbMCxc3t2u^XT'
src = u + t + i + l
m2 = hashlib.md5()
m2.update(src.encode("utf-8"))
str_sent = m2.hexdigest()
head = {
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9',
'Content-Length':"247",
'Connection':'keep-alive',
'Content-Type':'application/json; charset=UTF-8',
'Host':'fanyi.youdao.com',
'Origin':'http://fanyi.youdao.com',
'Referer':'http://fanyi.youdao.com/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
'X-Requested-With':'XMLHttpRequest',
'Cookie': 'OUTFOX_SEARCH_USER_ID=1523396180@10.169.0.84; OUTFOX_SEARCH_USER_ID_NCOO=223699579.50150317; _ntes_nnid=8c0e5a401f47f77de8a85318dc9ca832,1641732829832; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcHH4fqAJWSs6a5XUL5x; SESSION_FROM_COOKIE=unknown; ___rl__test__cookies='+str(int(time.time()*1000)+random.randint(1, 10))
}
data = {
'i': t,
'from':'AUTO',
'to':'AUTO',
'smartresult':'dict',
'client':'fanyideskweb',
'salt':i,
'sign':str_sent,
'doctype':'json',
'version':'2.1',
'keyfrom':'fanyi.web',
'action':'FY_BY_REALTIME',
'typoResult':'false'
}
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url, data)
html =response.read().decode('utf-8')
target = json.loads(html)
print("翻译的结果是:%s" %(target['translateResult'][0][0]['tgt']))
python谷歌翻译接口
谷歌翻译很简单,直接上代码
import re
import html
from urllib import parse
import requests
GOOGLE_TRANSLATE_URL = 'http://translate.google.cn/m?q=%s&tl=%s&sl=%s'
def translate(text, to_language="auto", text_language="auto"):
text = parse.quote(text)
url = GOOGLE_TRANSLATE_URL % (text,to_language,text_language)
response = requests.get(url)
data = response.text
expr = r'(?s)class="(?:t0|result-container)">(.*?)<'
result = re.findall(expr, data)
if (len(result) == 0):
return ""
return html.unescape(result[0])
|