Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何以编程方式更改用户代理字符串?_Python_User Agent - Fatal编程技术网

Python 如何以编程方式更改用户代理字符串?

Python 如何以编程方式更改用户代理字符串?,python,user-agent,Python,User Agent,我想写一个程序,改变我的用户代理字符串 如何在Python中执行此操作?使用Python,您可以下载网页并使用版本值更改用户代理 这方面有一个很好的例子 以下是从该页面复制的示例: >>> from urllib import FancyURLopener >>> class MyOpener(FancyURLopener): ... version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1

我想写一个程序,改变我的用户代理字符串

如何在Python中执行此操作?

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

这方面有一个很好的例子

以下是从该页面复制的示例:

>>> 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>[…]
>>从urllib导入FancyURLopener
>>>类开孔器(开孔器):
...   版本='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()
[…]python大约81800000个结果中的1-10个[…]

我想您是指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
中,使用参数为
headers=somedict
req=urllib2.Request(…)
在您创建的新请求对象
req
urllib2.urlopen(req)
中设置您想要的所有头(包括用户代理)


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

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


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

urllib2
很好,因为它是内置的,但我倾向于在有选择的时候使用它。它扩展了很多
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")] 
祝您好运。

为Python 3.2(py3k)更新:


如上所述,可以使用python中的内置模块(如urllib2)更改http请求头中的用户代理字段。同时,分析web服务器到底看到了什么也很重要。上最近的一篇文章给出了示例代码和输出,其中描述了web服务器在发送编程请求时看到的内容。

如果您的问题已得到回答,是否将其中一个答案标记为解决方案?
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()