40

有没有办法解决以下问题?屏幕抓取:绕过“HTTP错误403:robots.txt不允许的请求”

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

是解决这个问题的唯一办法联系该网站所有者(barnesandnoble.com)..我要建一个网站,给自己带来更多的销售,不知道为什么他们会在某个深度拒绝访问。

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

希望有一个变通

+0

可能有法律问题,如果你打算赚钱,但如果你不” t,请继续。万岁scroogle。 – 2010-05-17 00:44:35

回答

13

您可以尝试躺在你的用户代理(例如,通过努力使相信你是一个人,而不是机器人),如果你想在可能与巴恩斯的法律纠纷&贵族。为什么不与他们的业务发展部门联系并说服他们专门授权您?他们毫无疑问只是试图避免让他们的网站被诸如价格比较引擎之类的机器人所刮擦,如果你能说服他们你不是一个人,签订合同等,他们可能会愿意你的例外。

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

+0

他们的robots.txt只禁止“/reviews/reviews.asp” - 这是你在刮的东西吗? – fmark 2010-05-17 02:43:44

+0

感谢Alex,我同意......在阅读了关于robots.txt的更多信息之后,这是最好的方法。干杯... @fmark我刮了视频部分... http://video.barnesandnoble.com/robots.txt – Diego 2010-05-18 00:38:27

+11

robots.txt没有法律约束力。 (http://www.nytimes.com/2005/07/13/technology/13suit.html?ex=1278907200&en=377b4f3f0d459300&ei=5090&partner=rssuserland&emc=rss) – markwatson 2011-05-02 00:54:25

1

设置你的User-Agent头匹配一些真正的IE/FF的User-Agent。

这里是我的IE8用户代理字符串:

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) 
+0

不错的作弊;)但在这种情况下它不起作用 – 2011-07-22 17:44:02

0

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

+0

我没有看到任何_ethical_问题,但_legal_问题可能会变得更糟(无论你模仿谁,都可以检测到你,并且控告你的行为被删除,而不仅仅是B&N和你的ISP)。 “做这件非法事情,只是不被发现”并不是谨慎的建议,即使没有道德问题(而且,我再说一遍,我没有看到任何违反这些特定法律的事情 - 这对于冒险来说太冒险了潜在的收益太少了;-)。 – 2010-05-17 00:51:07

+0

在这种情况下,法律问题是一个道德问题,你是否遵循它。 – 2010-05-17 00:53:37

0

看起来,你必须做更少的工作绕过robots.txt,at least says this article。所以你可能需要删除一些代码来忽略过滤器。

+0

该文章更多关于自定义代码来抓取网站。如果您正在使用某个库,则该库可能已经在尊重robots.txt。 – Niyaz 2012-10-16 04:39:43

4

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

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

browser.set_handle_equiv(False) 

这忽略robots.txt的。

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

+0

嘿,你是什么意思,扼杀你的要求? – Diego 2010-05-18 00:39:31

+0

我的意思是,在每个请求(即time.sleep(1))之后设置一个小超时,并且不要使用多个线程。我会使用一些线程(以防有些陷入困境),几秒钟的睡眠。 – wisty 2010-05-18 01:21:58

+1

这不适用于机械化的当前版本 – 2014-10-24 13:31:52

2

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

183

哦,你需要忽略的robots.txt

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

这就是我正在寻找的。 – 2011-03-23 12:11:59

+3

正是我在找的,欢呼! – 2013-10-14 09:29:45

+0

祝您有美好的一天:-) – 2013-10-14 09:34:55

2

的代码做一个正确的请求:

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 
+0

解释的唯一答案 - 我们如何设置标题以及禁用'robots.txt'处理。 – markroxor 2018-01-03 06:20:23