Scrapy在条件下停止分页?

时间:2017-06-13 00:02:00

标签: python pagination scrapy scrapy-spider

所以我想从一个有分页的网站上抓取文章。基本上,每个页面都是文章链接列表,蜘蛛按照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,但我不太确定我正在寻找什么对于。

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:4)

您可以通过设置:

来实现这一目标

CLOSESPIDER_ITEMCOUNT = 150

在您的项目设置中。

如果您的项目中有多个蜘蛛并且只想让某个特定的蜘蛛受此设置影响,请在 custom_settings 类变量中设置它:

custom_settings = { 'CLOSESPIDER_ITEMCOUNT': 150 }

答案 1 :(得分:1)

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

这增加了允许已经在下载队列中的项目和网址完成而不提取任何更多项目的优雅行为。

我从未使用过CLOSESPIDER_ITEMCOUNT所以我没有'知道这是否优雅"关闭蜘蛛。我希望它不会

在每个解析函数的开头:

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