我想编写一个更改我的用户代理字符串的程序。
我怎样才能在Python中执行此操作?
答案 0 :(得分: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()
答案 1 :(得分:3)
在urllib
中,它是这样完成的:
import urllib
class AppURLopener(urllib.FancyURLopener):
version = "MyStrangeUserAgent"
urllib._urlopener = AppURLopener()
然后正常使用urllib.urlopen
。在urllib2
中,使用参数req = urllib2.Request(...)
的{{1}}在您创建的新请求对象headers=somedict
中设置所需的所有标头(包括用户代理),以及{ {1}}。
当然,发送HTTP请求的其他方式还有其他指定标头的方法。
答案 2 :(得分: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>[…]
答案 3 :(得分:2)
urllib2
很好,因为它是内置的,但是当我有选择时,我倾向于使用mechanize。它扩展了很多urllib2
的功能(尽管近年来已将其中大部分添加到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")]
祝你好运。
答案 4 :(得分:1)
如上面的答案所述,可以使用python中的内置模块(如urllib2)更改http请求标头中的user-agent字段。同时,分析Web服务器的确切内容也很重要。最近一篇关于User agent detection的帖子提供了一个示例代码和输出,它描述了Web服务器在发送编程请求时所看到的内容。
答案 5 :(得分:0)
如果您想更改打开网页时发送的用户代理字符串,请浏览一下Firefox插件。 ;)例如,我找到了this one。或者您可以在Python中编写代理服务器,它可以独立于浏览器更改您的所有请求。
我的观点是,改变字符串将是最容易的部分;你的第一个问题应该是,我需要在哪里更改它?如果你已经知道(在浏览器?代理服务器?你和你正在点击的网络服务器之间的路由器上?),我们可能会更有帮助。或者,如果您只是在脚本中执行此操作,请使用任何urllib
个答案。 ;)
答案 6 :(得分: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()