我想编写一个更改我的用户代理字符串的程序。
我怎样才能在 Python 中做到这一点?
我假设您的意思是 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()
在urllib
中,它是这样完成的:
import urllib
class AppURLopener(urllib.FancyURLopener):
version = "MyStrangeUserAgent"
urllib._urlopener = AppURLopener()
然后就可以urllib.urlopen
正常使用了。在中,与参数一起urllib2
使用以在您创建的新请求对象中设置您想要的所有标头(包括用户代理),并且.req = urllib2.Request(...)
headers=somedict
req
urllib2.urlopen(req)
当然,发送 HTTP 请求的其他方式也有其他指定标头的方式。
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")]
祝你好运。
使用 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>[…]
如上面的答案所述,http请求标头中的用户代理字段可以使用python中的内置模块(例如urllib2)进行更改。同时,分析 Web 服务器究竟看到了什么也很重要。最近一篇关于用户代理检测的文章提供了一个示例代码和输出,其中描述了发送编程请求时 Web 服务器看到的内容。
针对 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()
如果您想更改打开网页时发送的用户代理字符串,请搜索 Firefox 插件。;) 例如,我找到了这个。或者你可以用 Python 编写一个代理服务器,它会独立于浏览器改变你的所有请求。
我的观点是,更改字符串将是容易的部分;你的第一个问题应该是,我需要在哪里改变它?如果您已经知道(在浏览器上?代理服务器上?在您和您正在访问的 Web 服务器之间的路由器上?),我们可能会更有帮助。或者,如果您只是在脚本中执行此操作,请选择任何urllib
答案。;)