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
所以我想从一个有分页的网站上抓取文章。基本上,每个页面都是文章链接的列表,蜘蛛程序以 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