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

2017-08-13 23:03:45 +08:00
 sqf3903
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=
就不可以,这是为什么啊?还有就是我注释掉的这一行是什么意思,翻译时每次都会变。
3355 次点击
所在节点    Python
12 条回复
katios
2017-08-14 09:36:35 +08:00
直接从网址复制下来的,并不是翻译的接口,而是界面的显示的 url.
你翻译实际上是请求的 http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null
这个地址。
sqf3903
2017-08-14 10:50:31 +08:00
@katios 请问这个地址是在哪里找到的?
Eds1995
2017-08-14 16:43:57 +08:00
@katios 会用浏览器 chrome 吗?右键开发工具,然后点击 Network,观察请求,就可以看到 url
Eds1995
2017-08-14 16:50:29 +08:00
omg21
2017-08-14 16:50:34 +08:00
先做好准备,
打开这个页面: http://fanyi.youdao.com/
按 f12 打开调式模式,选 network
然后回到网页上,在需要翻译的内容栏里随便写点什么,然后点翻译,这里你会看到 调试模式里出现了一列文件,你先找到 translate 这个文件,点一下,会弹出一个子菜单,然后再点 preview,这就是你要的结果了。
sqf3903
2017-08-15 09:33:53 +08:00
@Eds1995 我就这样找的,就是不行,就是不行的那串 url
sqf3903
2017-08-15 09:34:18 +08:00
@Eds1995 谢谢,我还想知道怎么来的?
sqf3903
2017-08-15 09:34:42 +08:00
@omg21 好的!万分感谢!
spinecho
2017-08-15 09:39:44 +08:00
为什么 请求 直接返回 {"errorCode":50}
sqf3903
2017-08-15 13:07:39 +08:00
@spinecho 我也不清楚啊,不过根结是因为 URL 问题。
Eds1995
2017-08-15 17:22:44 +08:00
@sqf3903 你可以多看一下一些关于有道爬虫的例子,很多人都会在 sessionFrom=后面加一些字符串,或者其他东西。我所理解的是这应该是有道固有格式。不要在意这些东西,可能是有道设置的翻爬虫之类(猜的)。
sqf3903
2017-08-19 13:26:57 +08:00
@Eds1995 嗯,好的,谢谢指点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/382682

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX