屏幕抓取:绕过“HTTP错误403:robots.txt不允许的请求”

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

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

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

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

希望有一个解决办法

如果您想要与Barnes&Noble发生可能的法律纠纷,您可以尝试说谎您的用户代理(例如,试图让您相信您是一个人,而不是一个机器人)。 为什么不与他们的业务发展部门取得联系,说服他们专门授权你? 他们无疑只是试图避免让他们的网站被诸如价格比较引擎之类的机器人所掠夺,如果你能说服他们你不是一个人,签订合同等,他们可能会愿意你的例外。

一个“技术性”的解决方法,只是打破了robots.txt中的编码策略,这是一种高度法律风险的方法,我永远不会推荐。 顺便说一句,他们的robots.txt如何阅读?

哦,你需要忽略robots.txt

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

机械化自动跟随robots.txt,但它可以被禁用,假设你有权限,或者你已经想通过道德..

在浏览器中设置一个标志:

 browser.set_handle_equiv(False) 

这会忽略robots.txt。

此外,请确保您节制您的请求,所以你不要把太多的负载在他们的网站上。 (注意,这也使得它们不太可能检测到并禁止你)。

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

设置您的User-Agent标题匹配一些真正的IE / FF用户代理。

这是我的IE8 useragentstring:

 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) 

代码做出正确的请求:

 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 

没有辩论这个道德,你可以修改标题看起来像谷歌例如,或谷歌拦截以及?

看起来,你不得不less做一些工作来绕过robots.txt , 至less说这篇文章 。 所以你可能不得不删除一些代码来忽略filter。