【问题标题】:Why does Google Search return HTTP Error 403?为什么 Google 搜索会返回 HTTP 错误 403?
【发布时间】:2009-03-01 21:16:25
【问题描述】:

考虑以下 Python 代码:

30 url = "http://www.google.com/search?hl=en&safe=off&q=Monkey" 31 url_object = urllib.request.urlopen(url); 32 打印(url_object.read());

运行时会抛出异常:

File "/usr/local/lib/python3.0/urllib/request.py", line 485, in http_error_default
   raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

但是,当将其放入浏览器时,搜索会按预期返回。这里发生了什么?我该如何克服这个问题,以便以编程方式搜索 Google?

有什么想法吗?

【问题讨论】:

    标签: python google-search


    【解决方案1】:

    这应该可以解决问题

    user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'
    
    url = "http://www.google.com/search?hl=en&safe=off&q=Monkey"
    headers={'User-Agent':user_agent,} 
    
    request=urllib2.Request(url,None,headers) //The assembled request
    response = urllib2.urlopen(request)
    data = response.read() // The data u need
    

    【讨论】:

    • 能否格式化您的代码? (只需选择它并按 ctrl-k。)
    • +1 这很好用。但是,如果您过于频繁地从 google API 请求,它将阻止您的请求(即抛出错误)。我将我的速度限制为每 3 秒一次,而且我似乎不再被阻止了。
    【解决方案2】:

    如果您想通过编程界面“正确”地进行 Google 搜索,请查看 Google APIs。这些不仅是搜索 Google 的官方方式,而且如果 Google 更改其结果页面布局,它们也不太可能改变。

    【讨论】:

    • 你知道引擎盖下发生了什么吗?我很好奇……为什么 url.read() 看起来不像标准浏览器读取?
    • 这些 API 无需通过 Web 界面,而是直接访问搜索 XML。它们连接到 Google 的不同页面,为您提供不同格式的数据。基本上,你得到 403 是因为你不被允许以你的方式访问数据,而谷歌知道这一点 (...)
    • (...) 因为您的应用 (a) 没有发送 User-Agent 字符串,或者 (b) 发送了 Google 识别为机器人的默认字符串(请参阅 google.com/robots.txt
    • 他们的 api 的问题是他们没有返回与 google.com 相同的结果。见code.google.com/p/google-ajax-apis/issues/detail?id=43
    • 我不喜欢的一件事:他们将您限制为 64 个结果。
    【解决方案3】:

    作为lacqui suggestedGoogle API's 是他们希望您从代码发出请求的方式。不幸的是,我发现他们的文档针对的是编写 AJAX 网页的人,而不是发出原始 HTTP 请求。我使用LiveHTTP Headers 来跟踪样本发出的HTTP 请求,我发现ddipaolo's blog post 很有帮助。

    还有一件事让我感到困惑:它们将您限制为查询的前 64 个结果。如果您只是为网络用户提供搜索框,这通常不是问题,但如果您尝试使用 Google 进行数据挖掘,则没有帮助。我猜他们不希望您使用他们的 API 进行数据挖掘。 64 这个数字随着时间的推移而变化,并且因搜索产品而异。

    更新:看来他们绝对不希望你去挖掘数据。最终,您会收到带有指向此 API access notice 的链接的 403 错误。

    请查看您正在使用的 API 的使用条款(链接在右侧边栏中)并确保合规。我们很可能因以下违反使用条款之一而阻止了您: 我们收到了自动请求,例如抓取和预取。禁止自动请求;所有请求都必须是最终用户操作的结果。

    他们还列出了其他违规行为,但我认为这是触发我的违规行为。我可能不得不调查雅虎的 BOSS 服务。它似乎没有那么多限制。

    【讨论】:

      【解决方案4】:

      你这样做太频繁了。谷歌有一些限制,以防止被搜索机器人淹没。您还可以尝试将用户代理设置为更类似于普通浏览器的内容。

      【讨论】:

      • 错误答案。它在第一次尝试时阻塞。
      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      相关资源
      最近更新 更多