Scrapy自带的断点续爬JOB-DIR参数

发布时间 2023-07-17 11:46:18作者: 蕝戀

参考官方文档:https://docs.scrapy.org/en/latest/topics/jobs.html?highlight=JOBDIR#jobs-pausing-and-resuming-crawls

Scrapy原生是支持断点续爬,这意味着如果运行爬虫时发生错误或中断,可以从上次停止的位置恢复爬取。下面是一些可以实现断点续爬的方法:

  1. 使用Scrapy自带的JOBDIR设置。使用该参数可以将当前爬虫的状态存储在硬盘上,以便在后续运行时从此处继续。例如:scrapy crawl myspider -s JOBDIR=jobs/myspider-1
  2. 在settings.py文件中启用JOBDIR设置。这样可以在多个爬虫之间共享状态。例如:
JOBDIR = 'jobs'
  1. 在Spider代码中使用start_requests方法中的request.meta['foo']参数自定义断点。例如:
def start_requests(self):
    last_seen = self.get_last_seen()
    if last_seen:
        yield scrapy.Request("http://example.com/items?page=1",
                             meta={'page': last_seen},
                             callback=self.parse_items)

def parse_items(self, response):
    page = response.meta.get('page', 1)
    # ...
    self.save_last_seen(page)

无论哪种方式,断点续爬的目标都是在发生错误时保留爬虫当前的状态,并在后续运行时从此处继续。为了成功实现断点续爬,必须确保每个页面都被处理。如果不确定一个页面是否被处理,请将其标记为不可用,直到下一个周期开始。这可以通过一个标志或者一个数据库中的字段来实现。