为什么Google搜索会返回HTTP错误403?

时间:2009-03-01 21:16:26

标签: python google-search

考虑以下Python代码:

 30    url = "http://www.google.com/search?hl=en&safe=off&q=Monkey"
 31    url_object = urllib.request.urlopen(url);
 32    print(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?

有什么想法吗?

4 个答案:

答案 0 :(得分:26)

这应该可以解决问题

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

答案 1 :(得分:25)

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

答案 2 :(得分:2)

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

还有一件事搞砸了我们:他们限制你从查询中获得前64个结果。如果您只是为网络用户提供搜索框,通常不会有问题,但如果您尝试使用Google进行数据挖掘则无济于事。我猜他们不希望你使用他们的API进行数据挖掘。 64号码随着时间的推移而发生变化,因搜索产品而异。

更新:看来他们绝对不希望您进行数据挖掘。最终,您收到403错误,其中包含指向此API access notice的链接。

  

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

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

答案 3 :(得分:0)

你经常这样做。谷歌有限制,以防止被搜索机器人淹没。您还可以尝试将用户代理设置为更接近普通浏览器的内容。