python 百度翻译 有道翻译

百度翻译

  • baidufanyi.py
import requests
import re
import json
import execjs

URL = 'https://fanyi.baidu.com/?aldtype=16047#zh/en/'
TRANSLATE_API = 'https://fanyi.baidu.com/v2transapi'
REALTRANSLATE_API = 'https://fanyi.baidu.com/transapi'

HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Host': 'fanyi.baidu.com',
    'Origin': 'https://fanyi.baidu.com',
    'Referer': 'https://fanyi.baidu.com/',
    'X-Requested-With': 'XMLHttpRequest',
}

HEADERS2 = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0', 'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Host': 'fanyi.baidu.com', 'Origin': 'https://fanyi.baidu.com', 'Referer': 'https://fanyi.baidu.com/', 'X-Requested-With': 'XMLHttpRequest', 'Cookie': 'BAIDUID=BEA2658FC962DF6CA0C053E5690C1934:FG=1; locale=zh; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1540531940; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1540531984; from_lang_often=%5B%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%2C%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%5D; to_lang_often=%5B%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%2C%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%5D'}


Cookie = 'REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1540531940; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1540531984; from_lang_often=%5B%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%2C%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%5D; to_lang_often=%5B%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%2C%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%5D'

class fanYi:
    def __init__(self):
        self._session = requests.session()
        self._data = {
            'from': 'en',
            'to': 'zh',
            'query': '',
            'transtype': 'realtime',
            'simple_means_flag': '3',
            'sign': '',
            'token': ''
        }

    def _set_words(self, words):
        self._words = words

    def _get_token(self):
        response = self._session.get(URL, headers=HEADERS2)
        html = response.text
        li = re.search(r"<script>\s*window\[\'common\'\] = ([\s\S]*?)</script>", html)
        token = re.search(r"token: \'([a-zA-Z0-9]+)\',", li.group(1))
        self._data['token'] = token.group(1)

    def _get_sign(self):
        with open('baidufanyi.js') as f:
            js = f.read()
        sign = execjs.compile(js).call('e', self._words)
        self._data['sign'] = sign

    def _translate(self):
        self._get_token()
        self._get_sign()
        self._data['query'] = self._words
        # string = ''
        # cookie = self._session.cookies.get_dict()
        # for key in cookie:
        #     string += key + '=' + cookie[key] + '; '
        # # response = self._session.post(REALTRANSLATE_API, data=self._data, headers=HEADERS)
        # HEADERS['Cookie'] = string + Cookie
        # print(HEADERS)
        response = self._session.post(TRANSLATE_API, data=self._data, headers=HEADERS2)
        Dict = json.loads(response.content.decode('utf-8'))
        print(Dict['trans_result']['data'][0]['dst'])


if __name__ == "__main__":
    fanyi = fanYi()
    while True:
        fanyi._set_words(input())
        fanyi._translate()
  • baidufanyi.js
var i = "320305.131321201"

function a(r){if(Array.isArray(r)){for(var o=0,t=Array(r.length);o<r.length;o++)t[o]=r[o];
return t}return Array.from(r)}

function n(r,o){for(var t=0;t<o.length-2;t+=3){var a=o.charAt(t+2);a=a>="a"?a.charCodeAt(0)-87:Number(a),a="+"===o.charAt(t+1)?r>>>a:r<<a,r="+"===o.charAt(t)?r+a&4294967295:r^a
}return r}

function e(r) {
        var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
        if (null === o) {
            var t = r.length;
            t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr( - 10, 10))
        } else {
            for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++)"" !== e[C] && f.push.apply(f, a(e[C].split(""))),
            C !== h - 1 && f.push(o[C]);
            var g = f.length;
            g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice( - 10).join(""))
        }
        var u = void 0,
        l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);
        u = null !== i ? i: (i = window[l] || "") || "";
        for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) {
            var A = r.charCodeAt(v);
            128 > A ? S[c++] = A: (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)), S[c++] = A >> 18 | 240, S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224, S[c++] = A >> 6 & 63 | 128), S[c++] = 63 & A | 128)
        }
        for (var p = m,
        F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++) p += S[b],
        p = n(p, F);
        return p = n(p, D),
        p ^= s,
        0 > p && (p = (2147483647 & p) + 2147483648),
        p %= 1e6,
        p.toString() + "." + (p ^ m)
    }

有道翻译

单纯翻译:

__author__ = 'hugowen'
# -*- coding:utf-8 -*-
'''
[33]python Web 框架:Tornado
https://blog.csdn.net/xc_zhou/article/details/80637714
https://pypi.org/project/tornado/
'''

from bs4 import BeautifulSoup
import tornado.httpclient

def is_chinese(uchar):
    if uchar >= u'\u4e00' and uchar <= u'\u9fa5':
        return True
    else:
        return False


if __name__ == "__main__":
    cli = tornado.httpclient.HTTPClient()
    link = 'http://dict.youdao.com/search?q='
    search = input('search: ')
    link += search
    # print(link)
    data = cli.fetch(link)
    body = data.body
    soup = BeautifulSoup(body)
    group = soup.find_all(class_ = 'trans-container')
    if is_chinese(search):
        content = group[0].find('ul').find('p')
        print(content.find_all('span')[0].get_text())
        for ele in content.find_all(class_ = 'contentTitle'):
            print(ele.find('a').get_text())
    else:
        content = group[0].find('ul').find_all('li')
        for ele in content:
            print(ele.get_text())

翻译并记录翻译日志: 输出到 words.md 文件中

__author__ = 'hugowen'
# -*- coding:utf-8 -*-
'''
[33]python Web 框架:Tornado
https://blog.csdn.net/xc_zhou/article/details/80637714
https://pypi.org/project/tornado/
'''

from bs4 import BeautifulSoup
import tornado.httpclient

def is_chinese(uchar):
    if uchar >= u'\u4e00' and uchar <= u'\u9fa5':
        return True
    else:
        return False

def translate(search):
    cli = tornado.httpclient.HTTPClient()
    link = 'http://dict.youdao.com/search?q='
    link += search
    data = cli.fetch(link)
    body = data.body
    soup = BeautifulSoup(body, "html.parser")
    group = soup.find_all(class_ = 'trans-container')
    result = []
    if is_chinese(search):
        content = group[0].find('ul').find('p')
        print(content.find_all('span')[0].get_text())
        for ele in content.find_all(class_ = 'contentTitle'):
            result.append(ele.find('a').get_text())
    else:
        content = group[0].find('ul').find_all('li')
        for ele in content:
            result.append(ele.get_text())
    return result


if __name__ == "__main__":
    while True:
        search = input('search: ')
        if search in ['Q', 'q']:
            break
        result = translate(search)
        with open('words.md', 'a') as f:
            f.write('###  ▌' + search + '\n')
            for r in result:
                f.write('- [ ] ' + r +'\n')
                print('▌> ' + r)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43964993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值