如何停止scrapy CrawlSpider并稍后续接?

13 投票
3 回答
5815 浏览
提问于 2025-04-17 01:31

我有一个Scrapy的CrawlSpider,它需要爬取很多很多的链接。我希望能够在爬虫运行的时候随时停止,并且保存当前的状态,以后可以继续爬,而不需要从头开始。请问在Scrapy这个框架里,有办法做到这一点吗?

3 个回答

2

Scrapy现在在他们的网站上有这个功能的详细说明,大家可以去看看:

下面是实际的命令:

scrapy crawl somespider -s JOBDIR=crawls/somespider-1
10

我想分享一下,最新版本的scrapy里加入了这个功能,不过参数的名字变了。你应该这样使用:

 scrapy crawl thespider --set JOBDIR=run1

想了解更多信息,可以查看这里 http://doc.scrapy.org/en/latest/topics/jobs.html#job-directory

6

几个月前,ML上有个问题:http://groups.google.com/group/scrapy-users/browse_thread/thread/6a8df07daff723fc?pli=1

引用Pablo的话:

我们不仅在考虑这个功能,还在努力开发中。目前我有两个可以用的补丁在我的MQ里,添加了这个功能,如果有人想提前试试,可以使用(需要按顺序应用): http://hg.scrapy.org/users/pablo/mq/file/tip/scheduler_single_spider.... http://hg.scrapy.org/users/pablo/mq/file/tip/persistent_scheduler.patch 要像以前一样运行爬虫(不保存状态):

scrapy crawl thespider 

要运行一个爬虫,并把调度器和重复过滤器的状态存储在一个目录里:

scrapy crawl thespider --set SCHEDULER_DIR=run1 

在爬取过程中,你可以按 ^C 来取消爬取,然后稍后用以下命令继续:

scrapy crawl thespider --set SCHEDULER_DIR=run1 

SCHEDULER_DIR这个设置的名称在最终发布前可能会改变,但想法是一样的——你需要提供一个目录来保存状态。

撰写回答