V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Haku
V2EX  ›  Python

问个有道翻译 web 版爬虫的问题

  •  
  •   Haku · 2018-04-03 22:55:26 +08:00 · 2699 次点击
    这是一个创建于 2186 天前的主题,其中的信息可能已经有所发展或是发生改变。

    爬了有道翻译的 web 结果,但是按照相应的接口给出参数后,只拿到了一部分的翻译结果,和 chrome 开发者模式下看到的少了一个辞典解释。如下:

    这是 chrome 下看到的: {"translateResult":[[{"tgt":"你好","src":"how are you"}]],"errorCode":0,"type":"en2zh-CHS","smartResult":{"entries":["","你好\r\n"],"type":1}}

    这是自己的 py 爬虫下得到的: {"translateResult":[[{"tgt":"你好","src":"how are you"}]],"errorCode":0,"type":"en2zh-CHS"}

    header、data 之类的都是照抄 chrome 下看到的,但是为什么会得到不一样的结果呢???

    PS:就是少了 smartResult 的部分,翻译其它的也是这样

    第 1 条附言  ·  2018-04-04 16:08:18 +08:00
    #py3.6
    import requests
    import json
    import time
    import random
    import hashlib

    headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
    'Cookie':'[email protected]; JSESSIONID=aaapzM6zvK5HW5Q4GBlkw; OUTFOX_SEARCH_USER_ID_NCOO=1439628582.5860655; G_WPT_TO=zh-CN; SL_GWPT_Show_Hide_tmp=1; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcMDMlWhRdmAa2a1Blkw; _ntes_nnid=3365979434764a149c48bb91c66a4f95,1522757759528; ___rl__test__cookies=1522758210385',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Length': '212',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Host': 'fanyi.youdao.com',
    'Origin': 'http://fanyi.youdao.com',
    'Referer': 'http://fanyi.youdao.com/',
    'X-Requested-With': 'XMLHttpRequest', }

    content = "school"
    tag = 'fanyideskweb'
    salt = str(int(time.time()*1000) + random.randint(1,10))
    sign = hashlib.md5((tag + content + salt + 'rY0D^0\'nM0}g5Mm1z%1G4').encode('utf-8')).hexdigest()


    data ={
    'i':content,
    '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':'false'
    }

    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    html = requests.post(url, headers = headers, data = data)
    print(html.json())
    4 条回复    2018-04-06 14:39:26 +08:00
    farverfull
        1
    farverfull  
       2018-04-04 12:17:39 +08:00
    起码贴个代码才好分析吧,估计是有 post 字段是动态的
    Haku
        2
    Haku  
    OP
       2018-04-04 16:09:37 +08:00
    @farverfull data 里面的确有动态生成的内容但那个好像和 samrtResult 的部分没啥关系
    farverfull
        3
    farverfull  
       2018-04-04 18:50:31 +08:00
    @Haku 你的抓的接口不对,这个应该是老接口不需要 sign 都可以请求。
    新接口: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

    还有,要先访问首页拿到 cookie 后再进行下一步,直接 set cookie 可能会失效。
    s = requests.session()

    另外,你这个加盐算法都找到了,也是厉害
    Haku
        4
    Haku  
    OP
       2018-04-06 14:39:26 +08:00
    @farverfull 谢谢谢谢,的确没问题了

    加盐是网上找的,试了一下没有问题就直接用了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2877 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:03 · PVG 21:03 · LAX 06:03 · JFK 09:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.