【问题标题】:Scrapy - flow of the Crawl spiderScrapy - 爬行蜘蛛的流程
【发布时间】:2015-06-30 13:11:09
【问题描述】:

我很难弄清楚 Scrapy 是如何工作的(或者我需要如何使用它)。 这个问题有点宽泛——更多的是为了理解。

我设置了一个 CrawlSpider 并输入了 6 个起始网址。
从这些(在每个起始 url 上抓取 24 项)中,我预计大约 144 行最终会出现在我的数据库中,但我现在只有 18 行。

所以我正在使用

def parse_start_url(self, response):

暂时避免与规则复杂化。 现在 Scrapy 应该获取这 6 个 url 并抓取它们,然后处理这些页面上的项目。 但相反,它似乎需要这 6 个网址,然后检查这些页面上的每个链接并首先关注这些链接 - 这可能吗?
Scrapy 是否只获取 URL 1,扫描所有链接并遵循所有允许的操作?
什么时候需要 URL 2?

【问题讨论】:

    标签: web-crawler scrapy


    【解决方案1】:

    您可以在official documentation page 中找到您的答案,但为了完整起见,我将其粘贴在这里:

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

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

    注意: 您描述爬取顺序的方式通常称为DFS(深度优先搜索)或BFS(广度优先搜索)。 Scrapy 使用了 DFO 和 BFO('O' 是 'order' 的意思,但意思是一样的)。

    【讨论】:

    • 啊,是的——非常好。如果不知道正确的关键字(LIFO/DFO/BFO/等)就很难搜索它。必须from scrapy import squeue,该页面上没有记录。但现在结果看起来更好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多