scrapy 的暂停和重启

scrapy的爬虫在运行时,需要暂时停止运行,并在下一次从暂停的地方继续爬取的方法:

1.打开cmd进入虚拟环境,cd到scrapy的main.py目录下;

2.在cmd下输入以下命令

scrapy crawl 爬虫名称 -s JOBDIR=保存进程的文件夹目录

比如我要运行的spider的name为zhihu,文件夹目录是scrapy目录下的job_info/001(001表示这是一次爬取任务,重新新建任务需要重新建立目录,比如002),我需要运行的指令为:

scrapy crawl jobbole -s JOBDIR=job_info/001

3.运行过程中按下Ctrl+c暂停任务,等待处理完未完成的进程(按下两次Ctrl+c为强制结束进程);

4.结束后显示:

[scrapy.core.engine] INFO: Spider closed (shutdown)

5.下次需要重启的时候,输入与第二步相同的命令。

### 如何在Scrapy中实现断点续爬功能 #### 1. 使用 `JOBDIR` 参数保存状态 Scrapy 提供了一个内置的功能来支持断点续爬,即通过设置 `JOBDIR` 参数。该参数用于存储请求队列跟踪的状态信息,以便在爬虫中断后能够恢复运行[^5]。 可以通过在配置文件 `settings.py` 或启动命令中指定 `JOBDIR` 的路径: ```python # settings.py 配置 JOBDIR JOBDIR = 'crawls/some_name' ``` 或者直接在命令行中传递参数: ```bash scrapy crawl myspider -s JOBDIR=crawls/some_name ``` 当启用此选项时,Scrapy 将会把未完成的请求其他必要的状态信息保存到指定目录中。如果爬虫意外终止,在重新启动时它可以从上次停止的地方继续执行。 #### 2. 自定义中间件处理暂停与恢复逻辑 除了利用 `JOBDIR` 功能外,还可以自定义下载器中间件或扩展来增强断点续爬的能力。例如,记录已抓取 URL 到数据库或其他持久化存储介质中,并在下次启动前加载这些数据以跳过已经访问过的页面[^6]。 下面展示一个简单例子,演示如何创建一个去重过滤器并将其集成至项目里: ```python from scrapy import Request from scrapy.exceptions import IgnoreRequest class SeenUrlsMiddleware: def __init__(self): self.seen_urls = set() @classmethod def from_crawler(cls, crawler): return cls() def process_request(self, request: Request, spider): if request.url in self.seen_urls: raise IgnoreRequest(f"Ignoring duplicate request to {request.url}") else: self.seen_urls.add(request.url) def close_spider(self, spider): with open('seen_urls.txt', 'w') as f: for url in self.seen_urls: f.write(url + '\n') ``` 接着更新 `settings.py` 文件激活这个新的中间件组件: ```python DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.SeenUrlsMiddleware': 543, } ``` 每次关闭蜘蛛程序之前都会自动保存所有遇到过的网址列表;当下次重启应用的时候读入这份清单从而避免重复劳动。 #### 3. 数据库辅助方案 对于更复杂的场景来说,可能需要用到外部关系型数据库 (RDBMS) 像 MySQL、PostgreSQL 来管理已完成的任务条目以及待办事项队列等等[^7]。这样做的好处是可以更好地控制整个流程并且方便后续分析统计工作。 假设我们有一个表用来追踪每一条新闻资讯的内容摘要及其来源链接地址,则可以在爬取过程中不断向其中插入新纪录的同时查询是否存在相同键值对防止再次采集相同的资源浪费时间精力。 --- ### 总结 综上所述,有多种方式可以帮助你在 Scrapy 中实现断点续爬功能。最简便的方法就是依靠官方推荐使用的 `JOBDIR` 设置项来进行基本的支持;而对于更加高级的需求则考虑引入额外的技术手段比如定制化的中间件或者是依托于后台服务端的数据管理系统共同协作达成目标效果。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值