我正在尝试使用以下代码打开 URL 以解析内容。但是当我尝试通过 python 而不是通过网络浏览器使用相同的 URL 时收到 403 错误。有什么帮助可以克服这个问题吗?
import urllib2
URL = 'http://www.google.com/search?q=something%20unusual'
response = urllib2.urlopen(URL)
来自 Py 解释器的响应:HTTPError:HTTP 错误 403:禁止
谷歌正在使用用户代理过滤来防止机器人与其搜索服务交互。您可以通过将这些结果与curl(1)
并可选地使用-A
标志来更改用户代理字符串进行比较来观察这一点:
$ curl -I 'http://www.google.com/search?q=something%20unusual'
HTTP/1.1 403 Forbidden
...
$ curl -I 'http://www.google.com/search?q=something%20unusual' -A 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0'
HTTP/1.1 200 OK
您可能应该改用Google 自定义搜索服务来自动执行 Google 搜索。或者,您可以使用库设置您自己的 User-Agent 标头urllib2
(而不是默认的类似"Python-urllib/2.6"
),但这可能违反 Google 的服务条款。
User-Agent
标题是给你的问题。在我看来,网页通过检查User-Agent
标题来禁止从非浏览器发出的任何请求。关键是User-Agent
在python中设置一个模拟浏览器的。
这对我有用:
In [1]: import urllib2
In [2]: URL = 'http://www.google.com/search?q=something%20unusual'
In [4]: opener = urllib2.build_opener()
In [5]: opener.addheaders = [('User-agent', 'Mozilla/5.0')]
In [6]: response = opener.open(URL)
In [7]: response
Out[7]: <addinfourl at 47799472 whose fp = <socket._fileobject object at 0x02D7F5B0>>
In [8]: response.read()
希望这可以帮助!