【问题标题】:HTTP403 Error urllib2.urlopen(URL)HTTP403 错误 urllib2.urlopen(URL)
【发布时间】:2023-03-18 10:31:01
【问题描述】:

我正在尝试使用以下代码打开 URL 以解析内容。但是当我尝试通过 python 而不是通过网络浏览器使用相同的 URL 时收到 403 错误。有什么帮助可以解决这个问题吗?

import urllib2
URL = 'http://www.google.com/search?q=something%20unusual'
response = urllib2.urlopen(URL)

来自 Py 解释器的响应:HTTPError:HTTP 错误 403:禁止

【问题讨论】:

    标签: python http urllib2


    【解决方案1】:

    Google 正在使用用户代理过滤来防止机器人与其搜索服务进行交互。您可以通过将这些结果与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 Custom Search 服务来自动执行 Google 搜索。或者,您可以使用 urllib2 库(而不是 "Python-urllib/2.6" 之类的默认值)设置您自己的 User-Agent 标头,但这可能违反 Google 的服务条款。

    【讨论】:

      【解决方案2】:

      User-Agent 标头是给您带来问题的标头。在我看来,该网页通过检查 User-Agent 标头来禁止从非浏览器发出的任何请求。关键是在python中设置一个模拟浏览器的User-Agent

      这对我有用:

      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()
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2012-12-26
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 2015-09-20
        相关资源
        最近更新 更多