屏幕抓取:绕过“HTTP错误403:robots.txt禁止请求”

时间:2010-05-17 00:35:43

标签: python screen-scraping beautifulsoup mechanize http-status-code-403

有没有办法解决以下问题?

httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt

唯一的办法是联系网站所有者(barnesandnoble.com)..我正在建立一个可以为他们带来更多销售的网站,不知道为什么他们会拒绝在某个深度访问。

我在Python2.6上使用了mechanize和BeautifulSoup。

希望能够解决这个问题

8 个答案:

答案 0 :(得分:191)

哦,你需要忽略robots.txt

br = mechanize.Browser()
br.set_handle_robots(False)

答案 1 :(得分:14)

如果你想与Barnes& amp;同时遇到法律问题,你可以尝试撒谎你的用户代理(例如,试图让你相信你是一个人而不是一个机器人)。高贵。为什么不与他们的业务开发部门取得联系并说服他们专门授权您?他们毫无疑问只是试图避免某些类型的机器人如价格比较引擎刮掉他们的网站,如果你能说服他们你不是一个,签订合同等,他们可能愿意做你的例外。

一种“技术”解决方法只是破坏了他们在robots.txt中编码的政策,这是一种我从不推荐的高风险法律方法。顺便说一句, 他们的robots.txt怎么读?

答案 2 :(得分:5)

机械化会自动跟随robots.txt,但是假设您有权限可以禁用它,或者您已经考虑过道德规范......

在浏览器中设置标记:

browser.set_handle_equiv(False) 

这会忽略robots.txt。

此外,请确保限制您的请求,这样您就不会对其网站施加太多负担。 (注意,这也使他们不太可能发现并禁止你)。

答案 3 :(得分:4)

提出正确请求的代码:

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
resp = br.open(url)
print resp.info()  # headers
print resp.read()  # content

答案 4 :(得分:3)

您收到的错误与用户代理无关。默认情况下,mechanize会在您使用robots.txt指令导航到站点时自动检查它们。使用mechanize.browser的.set_handle_robots(false)方法来禁用此行为。

答案 5 :(得分:1)

设置User-Agent标头以匹配某些真实的IE / FF用户代理。

这是我的IE8 useragent字符串:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; AskTB5.6)

答案 6 :(得分:0)

如果没有辩论道德,你可以修改标题看起来像googlebot,或者googlebot也被屏蔽了吗?

答案 7 :(得分:0)

看起来,你必须减少绕过robots.txtat least says this article的工作。因此,您可能必须删除一些代码才能忽略过滤器。