urllib2.urlopen()不会返回与chrome相同的页面

时间:2016-01-17 21:47:16

标签: python html google-chrome urllib2

我正在尝试制作一个可以下载电影文件字幕的小程序。

但是我注意到,当我在Chrome中使用链接并使用urllib2.urlopen()打开它时,不会给出相同的结果。

作为示例,让我们考虑链接http://www.opensubtitles.org/en/subtitleserve/sub/5523343。在chrome中,这会重定向到http://osdownloader.org/en/osdownloader.subtitles-for.you/subtitles/5523343,稍后会下载我想要的文件。

但是,当我在python中使用以下代码时,我会被重定向到另一个页面:

import urllib2
url = "http://www.opensubtitles.org/en/subtitleserve/sub/5523343"
response = urllib2.urlopen(url)

if response.url == url:
  print "No redirect"
else: 
  print url, " --> ", response.url

结果:http://www.opensubtitles.org/en/subtitleserve/sub/5523343 --> http://www.opensubtitles.org/en/subtitles/5523343/the-musketeers-commodities-en

为什么会这样?如何使用与浏览器相同的重定向?

(我知道这些网站在python中提供API,但这意味着在python中练习并且第一次使用urllib2)

1 个答案:

答案 0 :(得分:2)

您使用上面的urllib2从Chrome和您的脚本发出的请求存在显着差异,那就是HTTP标头User-Agent(https://en.wikipedia.org/wiki/User_agent)。

opensubtitles.org可能确定您正在尝试以编程方式检索网页,并阻止它。尝试使用Chrome中的一个用户代理字符串(更多http://www.useragentstring.com/pages/Chrome/):

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36

在你的剧本中。

请参阅此问题,了解如何编辑脚本以支持自定义用户代理标头 - Changing user agent on urllib2.urlopen

我还建议使用Python的请求库而不是urllib2,因为API更容易理解 - http://docs.python-requests.org/en/latest/

相关问题