【问题标题】:Order of crawling in ScrapyScrapy中的爬行顺序
【发布时间】:2011-12-04 22:24:18
【问题描述】:

我在 scrapy 中编写了一个基本的 CrawlSpider,但我想了解抓取网址的顺序是什么 - FIFO / LIFO?

我希望爬虫应该爬取起始 url 页面中的所有链接,然后移动到其他似乎不是顺序的 URL。

我该怎么做?

【问题讨论】:

标签: python scrapy


【解决方案1】:

http://readthedocs.org/docs/scrapy/en/0.14/faq.html#does-scrapy-crawl-in-breath-first-or-depth-first-order

默认情况下,Scrapy 使用 LIFO 队列来存储挂起的请求, 这基本上意味着它按 DFO 顺序爬行。这个订单更多 在大多数情况下很方便。如果您确实想以真正的 BFO 顺序爬行, 您可以通过设置以下设置来做到这一点:

 DEPTH_PRIORITY = 1
 SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue'
 SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue'

【讨论】:

  • 谢谢。我在哪里设置这个设置?在爬虫类中还是在scrapy.cfg文件中?
  • 把它们放在你项目模块的settings.py文件中
  • 谢谢。有效。同样,我如何允许 Scrapy 抓取 URL 包含指定正则表达式而不是其他链接的链接?我仍然需要遍历所有 url(即蜘蛛它们),但只抓取在其 url 中包含特定正则表达式的那些?
  • 我认为这不会解决问题。它将跟随那些包含那些正则表达式的链接。问题是这样的:假设页面 A 有指向页面 B1、B2、B3 的链接。然后 B1 有指向页面 C1、C2、D1、D2 的链接。类似地,B2 具有到 C3、C4、D2 的链接。我想从以 C 开头的页面(即 C1、C2、C3、C4)中提取数据。在规则中编写正则表达式不会遵循 B1、B2、B3 并且最终将永远不会到达“C”页面。
【解决方案2】:

你可以在你的 settings.py 中添加这个:

    DEPTH_PRIORITY = 1
    SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'
    SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'

参考官方文档

【讨论】:

    猜你喜欢
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2013-01-24
    • 2015-10-18
    • 2014-12-31
    相关资源
    最近更新 更多