如何通过Python脚本运行Scrapy并保存爬虫状态
在Python脚本中用Scrapy CrawlerProcess实现爬虫持久化(JOBDIR功能)
嘿,这问题问得很实用!其实在Python脚本里通过CrawlerProcess实现和命令行JOBDIR一样的持久化功能,核心逻辑就是把JOBDIR配置传递给爬虫的设置就行,完全不用复杂操作。下面给你一步步拆解具体怎么做:
方法一:手动构建包含JOBDIR的设置
如果你不想依赖项目的settings.py,可以直接在脚本里定义配置,把JOBDIR加进去:
- 先导入必要的模块,包括
CrawlerProcess和你的爬虫类 - 创建
CrawlerProcess实例时,传入包含JOBDIR的配置字典 - 启动爬虫即可
举个完整的代码示例:
from scrapy.crawler import CrawlerProcess # 替换成你自己的爬虫所在路径 from myspiders.spiders.somespider import SomeSpider if __name__ == "__main__": # 定义Scrapy配置,重点加入JOBDIR process_settings = { 'JOBDIR': 'crawls/somespider-1', # 其他你需要的配置可以按需添加,比如UA 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } # 初始化爬虫进程 process = CrawlerProcess(settings=process_settings) # 添加要运行的爬虫 process.crawl(SomeSpider) # 启动进程,开始爬取 process.start()
方法二:加载项目默认设置并覆盖JOBDIR
如果你的Scrapy项目已经有settings.py,推荐用这种方式,这样能复用项目里的所有配置,只需要单独覆盖JOBDIR:
from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings # 替换成你自己的爬虫路径 from myspiders.spiders.somespider import SomeSpider if __name__ == "__main__": # 获取项目的默认设置 settings = get_project_settings() # 覆盖JOBDIR配置,指定持久化目录 settings.set('JOBDIR', 'crawls/somespider-1') # 初始化进程并启动爬虫 process = CrawlerProcess(settings=settings) process.crawl(SomeSpider) process.start()
关键注意事项
JOBDIR目录的作用和命令行里完全一致:Scrapy会在这个目录存储爬虫的状态(比如未完成的请求队列、已爬取的记录等),下次运行脚本时会自动从上次中断的位置继续爬取。- 如果想从头开始爬取,一定要先删除这个
JOBDIR目录,否则爬虫会直接恢复之前的状态,不会重新开始。 - 第一次运行脚本时,
JOBDIR目录会自动创建,不需要手动提前创建。
内容的提问来源于stack exchange,提问作者Amit Basuri
相关产品推荐
相关产品推荐

