python调用有道接口和谷歌翻译实现自动翻译及其对比

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“是根据不同电脑生成,具体可以从谷歌网页开发者工具中找到
在这里插入图片描述
此时万事具备,就等请求了。
完整代码如下:

# encoding:utf-8
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])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值