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
sqf3903
V2EX  ›  Python

Python 新手,有个很奇怪的问题,特来请教

  •  
  •   sqf3903 · 2017-08-13 23:03:45 +08:00 · 3500 次点击
    这是一个创建于 2664 天前的主题,其中的信息可能已经有所发展或是发生改变。
    import urllib.request
    import urllib.parse

    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null'
    data = {}
    data['i'] = 'love'
    data['from'] = 'AUTO'
    data['to'] = 'AUTO'
    data['smartresult'] = 'dict'
    data['client'] = 'fanyideskweb'
    data['salt'] = '1502634572544'
    #sign:50b0d2d06c1220f996cc3766c05fca1c 会变
    data['doctype'] = 'json'
    data['version'] = '2.1'
    data['keyfrom'] = 'fanyi.web'
    data['action'] = 'FY_BY_CLlCKBUTTON'
    data['typoResult'] = 'true'
    data = urllib.parse.urlencode(data).encode('utf-8')

    req = urllib.request.Request(url,data)
    req.add_header('Referer','http://fanyi.youdao.com')
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36')
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')
    print(html)
    其中第三行代码( url 这一行)我换成
    http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null
    就可以爬取,但是换成直接从网页上复制下来的
    http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=
    就不可以,这是为什么啊?还有就是我注释掉的这一行是什么意思,翻译时每次都会变。
    12 条回复    2017-08-19 13:26:57 +08:00
    katios
        1
    katios  
       2017-08-14 09:36:35 +08:00
    直接从网址复制下来的,并不是翻译的接口,而是界面的显示的 url.
    你翻译实际上是请求的 http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null
    这个地址。
    sqf3903
        2
    sqf3903  
    OP
       2017-08-14 10:50:31 +08:00 via iPhone
    @katios 请问这个地址是在哪里找到的?
    Eds1995
        3
    Eds1995  
       2017-08-14 16:43:57 +08:00
    @katios 会用浏览器 chrome 吗?右键开发工具,然后点击 Network,观察请求,就可以看到 url
    Eds1995
        4
    Eds1995  
       2017-08-14 16:50:29 +08:00
    omg21
        5
    omg21  
       2017-08-14 16:50:34 +08:00
    先做好准备,
    打开这个页面: http://fanyi.youdao.com/
    按 f12 打开调式模式,选 network
    然后回到网页上,在需要翻译的内容栏里随便写点什么,然后点翻译,这里你会看到 调试模式里出现了一列文件,你先找到 translate 这个文件,点一下,会弹出一个子菜单,然后再点 preview,这就是你要的结果了。
    sqf3903
        6
    sqf3903  
    OP
       2017-08-15 09:33:53 +08:00 via iPhone
    @Eds1995 我就这样找的,就是不行,就是不行的那串 url
    sqf3903
        7
    sqf3903  
    OP
       2017-08-15 09:34:18 +08:00 via iPhone
    @Eds1995 谢谢,我还想知道怎么来的?
    sqf3903
        8
    sqf3903  
    OP
       2017-08-15 09:34:42 +08:00 via iPhone
    @omg21 好的!万分感谢!
    spinecho
        9
    spinecho  
       2017-08-15 09:39:44 +08:00
    为什么 请求 直接返回 {"errorCode":50}
    sqf3903
        10
    sqf3903  
    OP
       2017-08-15 13:07:39 +08:00 via iPhone
    @spinecho 我也不清楚啊,不过根结是因为 URL 问题。
    Eds1995
        11
    Eds1995  
       2017-08-15 17:22:44 +08:00
    @sqf3903 你可以多看一下一些关于有道爬虫的例子,很多人都会在 sessionFrom=后面加一些字符串,或者其他东西。我所理解的是这应该是有道固有格式。不要在意这些东西,可能是有道设置的翻爬虫之类(猜的)。
    sqf3903
        12
    sqf3903  
    OP
       2017-08-19 13:26:57 +08:00 via iPhone
    @Eds1995 嗯,好的,谢谢指点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1174 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:42 · PVG 02:42 · LAX 10:42 · JFK 13:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.