4

我想编写一个更改我的用户代理字符串的程序。

我怎样才能在 Python 中做到这一点?

4

7 回答 7

8

我假设您的意思是 HTTP 请求中的用户代理字符串?这只是与您的请求一起发送的 HTTP 标头。

使用 Python 的 urllib2:

import urllib2

url = 'http://foo.com/'

# add a header to define a custon User-Agent
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }

req = urllib2.Request(url, '', headers)
response = urllib2.urlopen(req).read()
于 2009-06-12T15:22:40.843 回答
3

urllib中,它是这样完成的:

import urllib

class AppURLopener(urllib.FancyURLopener):
    version = "MyStrangeUserAgent"

urllib._urlopener = AppURLopener()

然后就可以urllib.urlopen正常使用了。在中,与参数一起urllib2使用以在您创建的新请求对象中设置您想要的所有标头(包括用户代理),并且.req = urllib2.Request(...)headers=somedictrequrllib2.urlopen(req)

当然,发送 HTTP 请求的其他方式也有其他指定标头的方式。

于 2009-06-12T15:24:28.420 回答
2

urllib2很好,因为它是内置的,但是当我有选择时,我倾向于使用机械化。它扩展了很多urllib2's 功能(尽管其中大部分功能近年来已添加到 python 中)。无论如何,如果这是您正在使用的,这是他们的文档中有关如何更改用户代理字符串的示例:

import mechanize
cookies = mechanize.CookieJar()
opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookies))
opener.addheaders = [("User-agent", "Mozilla/5.0 (compatible; MyProgram/0.1)"),
                     ("From", "responsible.person@example.com")] 

祝你好运。

于 2009-06-12T15:38:03.023 回答
2

使用 Python,您可以使用urllib下载网页并使用版本值来更改用户代理。

http://wolfprojects.altervista.org/changeua.php上有一个很好的例子

这是从该页面复制的示例:

>>> from urllib import FancyURLopener

>>> class MyOpener(FancyURLopener):
...   version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11)
 Gecko/20071127 Firefox/2.0.0.11'
>>> myopener = MyOpener()
>>> page = myopener.open('http://www.google.com/search?q=python')
>>> page.read()
[…]Results <b>1</b> - <b>10</b> of about <b>81,800,000</b> for <b>python</b>[…]
于 2009-06-12T15:22:12.687 回答
1

如上面的答案所述,http请求标头中的用户代理字段可以使用python中的内置模块(例如urllib2)进行更改。同时,分析 Web 服务器究竟看到了什么也很重要。最近一篇关于用户代理检测的文章提供了一个示例代码和输出,其中描述了发送编程请求时 Web 服务器看到的内容。

于 2013-12-07T21:39:02.690 回答
0

针对 Python 3.2 (py3k) 更新:

import urllib.request
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }
url = 'http://www.google.com'
request = urllib.request.Request(url, b'', headers)
response = urllib.request.urlopen(request).read()
于 2011-12-29T09:36:56.387 回答
0

如果您想更改打开网页时发送的用户代理字符串,请搜索 Firefox 插件。;) 例如,我找到了这个。或者你可以用 Python 编写一个代理服务器,它会独立于浏览器改变你的所有请求。

我的观点是,更改字符串将是容易的部分;你的第一个问题应该是,我需要在哪里改变它?如果您已经知道(在浏览器上?代理服务器上?在您和您正在访问的 Web 服务器之间的路由器上?),我们可能会更有帮助。或者,如果您只是在脚本中执行此操作,请选择任何urllib答案。;)

于 2009-06-12T15:28:03.920 回答