Python Scrapy没有在所有页面上爬行

Python Scrapy没有在所有页面上爬行,python,scrapy,Python,Scrapy,我试图以一种非常基本的方式抓取网站。但是Scrapy并没有抓取所有的链接。我将解释如下场景- main_page.html->包含指向a_page.html、b_page.html、c_page.html的链接 a_page.html->包含指向a1_page.html、a2_page.html的链接 b_page.html->包含指向b1_page.html、b2_page.html的链接 c_page.html->包含到c1_page.html、c2_page.html的链接 a1_page

我试图以一种非常基本的方式抓取网站。但是Scrapy并没有抓取所有的链接。我将解释如下场景-

main_page.html->包含指向a_page.html、b_page.html、c_page.html的链接
a_page.html->包含指向a1_page.html、a2_page.html的链接
b_page.html->包含指向b1_page.html、b2_page.html的链接
c_page.html->包含到c1_page.html、c2_page.html的链接
a1_page.html->包含指向b_page.html的链接
a2_page.html->包含指向c_page.html的链接
b1_page.html->包含指向a_page.html的链接
b2_page.html->包含指向c_page.html的链接
c1_page.html->包含指向a_page.html的链接
c2_page.html->包含指向main_page.html的链接

我在爬行蜘蛛中使用以下规则-

规则(SgmlLinkExtractor(allow=()),callback='parse_item',follow=True))

但爬网结果如下所示:

调试:已爬网(200)http://localhost/main_page.html>(参考: 无)2011-12-05 09:56:07+0530[测试蜘蛛]调试:爬网(200)http://localhost/a_page.html>(参考: ) 2011-12-05 09:56:07+0530 [测试蜘蛛]调试:已爬网(200)http://localhost/a1_page.html> 参考资料:2011-12-05 09:56:07+0530 [测试蜘蛛]调试:已爬网(200)http://localhost/b_page.html> 参考资料:2011-12-05 09:56:07+0530 [测试蜘蛛]调试:已爬网(200)http://localhost/b1_page.html> 参考资料:2011-12-05 09:56:07+0530 [测试十字轴]信息:关闭十字轴(完成)

它不是在爬行所有的页面

注意-我已经在BFO中进行了爬行,正如在Scrapy文档中指出的那样


我遗漏了什么?

今天我遇到了类似的问题,尽管我使用的是定制的spider。 事实证明,该网站限制了我的爬网,因为我的用户代理是一个好斗的机器人

请尝试更改您的用户代理,然后重试。将其更改为已知浏览器的版本

您可能想尝试的另一件事是添加延迟。如果请求之间的时间间隔太小,一些网站会阻止删除。尝试添加2的下载延迟,看看是否有帮助

有关下载延迟的更多信息,请访问
默认情况下,Scrapy将过滤掉所有重复的请求

您可以使用(示例):

dont_filter(布尔)–表示此请求不应被删除 由调度程序过滤。这是在您要执行以下操作时使用的: 多次发出相同的请求,以忽略重复项筛选器。使用 小心点,否则你会陷入爬行循环。默认为False


也可以看到

可能很多URL都是重复的。Scrapy避免重复,因为它效率低下。从你的解释中我看到,因为你使用了followURL规则,当然,有很多重复项

如果您想确定并在日志中看到证据,请将其添加到
设置.py

DUPEFILTER_DEBUG = True
你会在日志中看到这样的行:

2016-09-20 17:08:47[scrapy]调试:筛选的重复请求:http://www.example.org/example.html>


谢谢我正在尝试添加下载延迟。但我举的这个网站是在本地主机上运行的,只包含简单的链接。不,那不行。在scrapy打印的统计数据中,我得到了类似的东西。”request_depth_max':5,您可能正在使用DepthMiddleware查看DepthMiddleware部分实际上不,我没有在scrapy项目的settings.py中使用DepthMiddleware(我认为它是使用depth_LIMIT激活的)。这让我快发疯了。我使用的是Github的最新代码。是的,我读过。但正如你将看到的,这不是问题所在。问题在于它不是在所有页面上爬行,也不是复制问题。不过,谢谢你的回答。我也在寻找复制问题。如果我不使用某种web来可视化它,那么我很难理解它所走的道路:-D-但是我仍然有一种感觉,它在某一点上过滤掉了一个重复的页面。我仍然会尝试dont_过滤器选项,只是为了确保。。。我想不出任何其他原因[在没有看到源html/spider的情况下]它不会刮除剩余的页面。是的,我曾尝试将dont_filter选项设置为False,但它也不能以这种方式工作。您应该将dont_filter kwarg设置为True(而不是False)以解决默认行为
DUPEFILTER_DEBUG = True