在urllib2.urlopen中更改用户代理

102 投票
9 回答
154311 浏览
提问于 2025-04-15 11:18

我怎么才能用一个不同于默认的用户代理来下载网页,使用的是 urllib2.urlopen 呢?


urllib2.urlopen 在 Python 3.x 中是 不可用的; 在 3.x 中可以用 urllib.request.urlopen 来代替。想了解如何在 Python 3 中通过标准库的 HTTP 功能来设置用户代理,可以查看 如何在 Python 3 中更改用户代理

9 个回答

105
headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.Request('www.example.com', None, headers)
html = urllib2.urlopen(req).read()
req = urllib2.Request('www.example.com', headers={ 'User-Agent': 'Mozilla/5.0' })
html = urllib2.urlopen(req).read()

或者,稍微简短一点:

119

我在几周前回答了一个类似的问题

那个问题里有示例代码,但基本上你可以这样做:(注意,User-Agent 的大小写是根据RFC 2616第14.43节的规定。)

opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open('http://www.stackoverflow.com')
61

设置用户代理,这是大家都喜欢的 Dive Into Python 中的内容。

简单来说:你可以用 Request.add_header 来做到这一点。

在创建请求的时候,你也可以把头信息作为一个字典传进去,文档中有说明

headers 应该是一个字典,系统会把它当作调用 add_header() 时每个键值对的参数来处理。这通常用来“伪装” User-Agent 头信息,浏览器用这个来标识自己——有些HTTP服务器只允许来自常见浏览器的请求,而不允许脚本的请求。例如,Mozilla Firefox 可能会自我标识为 "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11",而 urllib2 的默认用户代理字符串是 "Python-urllib/2.6"(在Python 2.6上)。

撰写回答