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

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=
就不可以,这是为什么啊?还有就是我注释掉的这一行是什么意思,翻译时每次都会变。
Python新手,有个很奇怪的问题,特来请教


13 回复

直接从网址复制下来的,并不是翻译的接口,而是界面的显示的 url.
你翻译实际上是请求的 http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null
这个地址。


我无法理解你的问题

请问这个地址是在哪里找到的?

会用浏览器 chrome 吗?右键开发工具,然后点击 Network,观察请求,就可以看到 url

先做好准备,
打开这个页面: http://fanyi.youdao.com/
按 f12 打开调式模式,选 network
然后回到网页上,在需要翻译的内容栏里随便写点什么,然后点翻译,这里你会看到 调试模式里出现了一列文件,你先找到 translate 这个文件,点一下,会弹出一个子菜单,然后再点 preview,这就是你要的结果了。

我就这样找的,就是不行,就是不行的那串 url

谢谢,我还想知道怎么来的?

好的!万分感谢!

为什么 请求 直接返回 {“errorCode”:50}

我也不清楚啊,不过根结是因为 URL 问题。

你可以多看一下一些关于有道爬虫的例子,很多人都会在 sessionFrom=后面加一些字符串,或者其他东西。我所理解的是这应该是有道固有格式。不要在意这些东西,可能是有道设置的翻爬虫之类(猜的)。

嗯,好的,谢谢指点

回到顶部