python在线翻译“2+1”的比较

小孩学习英语,想弄个在线翻译,将功能模块镶嵌到英语单词学习之中,找来找去,算是找到了2个免费的在线翻译(公元2020年8月实测有效,免费多久不好说),自己在百度又注册了个在线翻译应用,算是凑了个“2+1”。

一、代码

import requests 
import http.client
import hashlib
import json
import urllib
import random
import time
 
def baidu_translate(content):
    appid='20xxxxx'#本人百度ID
    secretKey = 'Bxxxxxxxxxxx'#本人百度IDKEY
    httpClient = None
    myurl = '/api/trans/vip/translate'
    q = content
    fromLang = 'en' # 源语言
    toLang = 'zh'   # 翻译后的语言
    salt = random.randint(32768, 65536)
    sign = appid + q + str(salt) + secretKey
    sign = hashlib.md5(sign.encode()).hexdigest()
    myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
        q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
        salt) + '&sign=' + sign
    try:
        httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
        httpClient.request('GET', myurl)
        # response是HTTPResponse对象
        response = httpClient.getresponse()
        #print(type(response))
        jsonResponse = response.read().decode("utf-8")# 获得返回的结果,结果为json格式
        #print(type(jsonResponse))
        #print(jsonResponse)
        js = json.loads(jsonResponse)  # 将json格式的结果转换字典结构
        #print(type(js))
        #print(js)
        dst = str(js["trans_result"][0]["dst"])  # 取得翻译后的文本结果
        #print(type(dst))
        #print(dst) # 打印结果
        return dst
    except Exception as e:
        print('err:'+e)
    finally:
        if httpClient:
            httpClient.close()    

def yd_trans(string):#一个中文解释,可句子
   url="http://fanyi.youdao.com/translate"#简化了,抓包是:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
   header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
                       "(KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"}
   data={}
   data['i']=string
   data['doctype'] = 'json'#其他项可以通过抓包查看,都可以省去
   result=requests.post(url,data=data)#不用头也可以:,headers=header
   transl=result.json()
   #print(transl)
   return transl['translateResult'][0][0]['tgt']

def bd_sug(string):#不能翻译句子
   req=requests.post('https://fanyi.baidu.com/sug',data={'kw':string})
   aa=req.json()#json可自动识别为中文
   st=''
   for i in aa['data']:#百度这个sug有多项解释,小棒,逐项提取
      st+=i['k']+':'+i['v']+'\n'
   return st

eng='post'
chs=yd_trans(eng)
print('有道翻译:',chs)
chs=bd_sug(eng)
print('百度免费翻译:',chs)
chs=baidu_translate(eng)
print('百度注册翻译:',chs)   


二、效果比较

post翻译比较如下:

百度sug免费翻译还全面些。

showing regard for others in manners, speech, behavior, etc.句子翻译结果比较如下:

还是注册的翻译比较靠谱。不过呢,批量处理时,百度会限制访问的频率,间隔时间设置2秒可行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值