小项目-有道翻译接口参数

参考:
python爬虫-有道翻译(js分析)
Python调用有道词典翻译

有道翻译

目标:使用python的post功能向该网页中提交翻译内容,并返回结果。

  1. 获取有道翻译post发送信息的网站:F12--network--all--找到Request Method:POST的一项,其中的Headers中general就是发往服务器的网址。
  2. post表格形式:在该项最后有Form Data就是表格形式:
    表格形式如下:
 'i': trans_str,
 'from': 'AUTO',
 'to': 'AUTO',
 'smartresult': 'dict',
 'client': 'fanyideskweb',
 'salt': salt,
 'sign': sign,
 'doctype': 'json',
 'version': '2.1',
 'keyfrom': 'fanyi.web',
 'action': 'FY_BY_REALTIME',
 'typoResult': 'True'

真实发去的形式:i=hello%0A&from=AUTO&to=AUTO&smartresult=dict&client=fanyideskweb&salt=1512717804298&sign=9423bd6df96d0bbc5403db99d44691ea&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_ENTER&typoResult=false

  1. 头信息:headers:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.9
Content-Length:201
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:OUTFOX_SEARCH_USER_ID_NCOO=493676007.9814818; _ntes_nnid=a7f22502fe6d2b3cb13f2c26de0ae65f,1512699043959; JSESSIONID=abcZkCYYfkyNHfvsh_0aw; SESSION_FROM_COOKIE=fanyiweb; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; OUTFOX_SEARCH_USER_ID=1885701466@219.142.224.73; ___rl__test__cookies=1512717804296
Host:fanyi.youdao.com
Origin:http://fanyi.youdao.com
Proxy-Connection:keep-alive
Referer:http://fanyi.youdao.com/?keyfrom=dict2.index
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
X-Requested-With:XMLHttpRequest
  1. 解析post表格含义,并创建真实的表格数据,以发送到服务器被识别。
    参考文章:Python爬虫,破解有道翻译接口参数
    我直接使用他的函数生成的表格信息,向大神致敬。
    大致过程:找到salt和sign生成对应的js文件,找到Source文件夹中Ctrl+F搜索salt或者sign找到的对应文件fanyi.min.js,然后保存到本地。使用在线js格式化工具格式化代码,网址:http://tool.oschina.net/codeformat/js/。找到与network中post递交的Form大致一样的部分。
t.translate = function(e, t) {
        T = u("#language").val();
        var n = b.val(),
        r = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10)),
        o = u.md5(E + n + r + O),
        a = n.length;
        if (D(), x.text(a), a > 5e3) {
            var l = n;
            n = l.substr(0, 5e3),
            o = u.md5(E + n + r + O);
            var c = l.substr(5e3);
            c = (c = c.trim()).substr(0, 3),
            u("#inputTargetError").text("有道翻译字数限制为5000字,“" + c + "”及其后面没有被翻译!").show(),
            x.addClass("fonts__overed")
        } else x.removeClass("fonts__overed"),
        u("#inputTargetError").hide();
        f.isWeb(n) ? i() : s({
            i: n,                     //待翻译内容
            from: _,                  //可默认为Auto
            to: C,                    //可默认为Auto
            smartresult: "dict",
            client: E,                //fanyideskweb
            salt: r,                  //需要模拟的参数1
            sign: o,                 //需要模拟的参数2
            doctype: "json",
            version: "2.1",
            keyfrom: "fanyi.web",
            action: e || "FY_BY_DEFAULT",
            typoResult: !1
        },
        t)
    },
    t.showResult = a

其中salt:r = "" + ((new Date).getTime() + parseInt(10 * Math.random(),10)),含义:

  • ((new Date).getTime() :返回new Date距 1970 年 1 月 1 日之间的毫秒数
    替代为python代码为:time.time()*1000。time.time()当前时间的时间戳(1970纪元后经过的浮点秒数),故乘以1000
  • parseInt(10 * Math.random(),10)):以十进制(也可以是2、8)解析10 * Math.random()(0到10之间的随机数,不包括0和10),得到一个十进制的随机整数。
    python代替: str(int(time.time() * 1000) + random.randint(1, 9))
  1. 完整代码如下:
import hashlib
import time
import random
import requests


def create_Data(trans_str):
    salt = int(time.time() * 1000) + int(random.random() * 10)
    client = 'fanyideskweb'
    a = "rY0D^0'nM0}g5Mm1z%1G4"
    m = hashlib.md5()
    digStr = client + trans_str + str(salt) + a
    m.update(digStr.encode('utf-8'))
    sign = m.hexdigest()
    data = {
        'i': trans_str,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': salt,
        'sign': sign,
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTIME',
        'typoResult': 'True'
    }
    return data


url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=null"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0",
}


trans_str = '你好'
payload = create_Data(trans_str)
r = requests.post(url, data=payload, headers=headers)
print(r.json())

要根据情况修改headers的信息和表格data的信息。 执行会出现{'errorCode': 50}的情况,解决办法:将url中 http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=null_o去掉即可,这样可访问。原因不知,好像得到翻译结果差了些。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • 在上一个章节,我们已经创建了一个基础的Blog程序。现在我们将使用一些Dajngo高级功能,去实现一个完整的blo...
    金金刚狼阅读 3,567评论 1 12
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,678评论 6 342
  • 最近单位里发生了一件事情,因为沟通上的一些问题,导致某位同事心生不满,继而迁怒领导做事偏心(她指责我是被偏向的那个...
    爱学习的爽爽阅读 309评论 0 2
  • 令他害怕的,並非暴力本身,而是那些討厭自己的人所散發的負面能量。他從來沒有想過,在這世上竟然會有這樣的惡意存在! ...
    萌小_小懒阅读 378评论 0 1