You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python脚本运行Scrapy并保存爬虫状态

在Python脚本中用Scrapy CrawlerProcess实现爬虫持久化(JOBDIR功能)

嘿,这问题问得很实用!其实在Python脚本里通过CrawlerProcess实现和命令行JOBDIR一样的持久化功能,核心逻辑就是把JOBDIR配置传递给爬虫的设置就行,完全不用复杂操作。下面给你一步步拆解具体怎么做:

方法一:手动构建包含JOBDIR的设置

如果你不想依赖项目的settings.py,可以直接在脚本里定义配置,把JOBDIR加进去:

  1. 先导入必要的模块,包括CrawlerProcess和你的爬虫类
  2. 创建CrawlerProcess实例时,传入包含JOBDIR的配置字典
  3. 启动爬虫即可

举个完整的代码示例:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:35:48