python开发的百度翻译接口
做的一个python版的百度翻译,附代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #!/usr/bin/env python # -*- coding:utf-8 -*- ''' 爬虫之百度翻译 需要的库有 js2py, requests, re, json ''' __author__ = 'YXQ' import js2py import requests import json import re #百度翻译的主页 url_fanyi = 'http://fanyi.baidu.com' #翻译时post的api url_api = 'http://fanyi.baidu.com/v2transapi' #设置 headers headers = { 'Cookie' : 'BIDUPSID=A360C8CE43082B9E2E23B5B111FC4363; PSTM=1485329732; to_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; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=26524_1466_21124_18560_26350_22158; locale=zh; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1531663222,1531743493; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1531748592; from_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; BAIDUID=96A2302A5D66AFBE539FFC68E881260F:FG=1' , 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4882.400 QQBrowser/9.7.13076.400' , } #get百度翻译主页,是为了得到token req_get = requests.get(url = url_fanyi, headers = headers) token = re.search(r "token: '(.*?)'," , req_get.text, re.S).group( 1 ) #需要翻译的内容,中英文都可以 translation_content = '我是一个中国人,我不为五斗米折腰' #读入js代码 def get_js(): with open ( 'sign.js' , 'r' , encoding = 'utf-8' ) as f: return f.read() #使用js2py在python中运行js代码并得到sign run_js = js2py.EvalJs({}) run_js.execute(get_js()) sign = run_js.e(translation_content) data = { 'query' :translation_content, 'sign' :sign, 'token' : token } req_post = requests.post(url = url_api, data = data, headers = headers) result = json.loads(req_post.text) print (result[ 'trans_result' ][ 'data' ][ 0 ][ 'dst' ]) |
js代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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 , i = null; u = null ! = = i ? i: (i = "320305.131321201" || " ") || " "; 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 = "+-a^+6" , D = "+-3^+b+-f" , 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) } |
将js代码保存为sign.js并放在python文件同目录
千行代码,Bug何处藏。 纵使上线又怎样,朝令改,夕断肠。
分类:
Python开发笔记
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析