Scrapy 按条件停止分页?

Scrapy stopping pagination on condition?

所以我想从一个有分页的网站上抓取文章。基本上,每个页面都是文章链接的列表,蜘蛛程序以 parse_article 方法跟踪页面上的链接,并跟踪后续的下一页链接。但是,有没有办法在指定数量的文章被抓取后停止?例如,这是我到目前为止使用的 crawlspider

rules = (

    #next page rule: 
    Rule(LinkExtractor(restrict_xpaths="//a[@class='next']"),follow=True)

    #Extract all internal links which follows this regex:
    Rule(LinkExtractor(allow=('REGEXHERE',),deny=()),callback='parse_article'),
)

def parse_article(self, response):
    #do parsing stuff here 

我想在分析完 150 篇文章后停止关注下一页。如果我刮了 150 多一点也没关系,我只想在达到那个数字后停止进入下一页。有什么办法吗?比如在 parse_article 方法中有一个计数器?刚接触 scrapy,所以我不确定要尝试什么....我调查了 depth_limit,但我不太确定这就是我要找的东西。

任何帮助将不胜感激,谢谢!

您可以通过设置来实现:

CLOSESPIDER_ITEMCOUNT = 150

在您的项目设置中。

如果您的项目中有多个 Spiders,并且只想让一个特定的 Spiders 受到此设置的影响,请将其设置在 custom_settings class 变量中:

custom_settings = { 'CLOSESPIDER_ITEMCOUNT': 150 }

我对我的蜘蛛采取的方法实际上是有一个 donescraping 标志,我首先在我的每个 parse_* 函数中检查它,return 一个空的结果列表。

这增加了允许下载队列中已有的项目和 url 完成而不获取任何更多项目的优雅行为。

我从未使用过 CLOSESPIDER_ITEMCOUNT,所以我不知道 "gracefully" 是否会关闭蜘蛛。我预计不会

在每个解析函数的开头:

#early exit if done scraping
    if self.donescraping:
        return None