如何在Scrapy的CrawlerProcess中设置Feed Exporter覆盖输出文件?
Scrapy CrawlerProcess 实现爬取结果覆盖导出文件
问题背景
用Scrapy开发爬虫,通过CrawlerProcess而非命令行执行,已用Feed exporters实现JSON文件导出,代码如下:
from scraper.spiders.pp_spider import ConverterSpider import scrapy from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings settings = get_project_settings() settings.set('FEED_FORMAT', 'json') settings.set('FEED_URI', 'result.json') process = CrawlerProcess(settings) process.crawl(ConverterSpider) process.start()
现在需要每次新爬取时自动覆盖result.json,但直接用FEEDS字典配置的方式在CrawlerProcess里无效,想通过代码动态设置实现覆盖需求。
解决方法
Scrapy 2.0及以上版本已采用FEEDS统一配置导出规则,替代了旧版的FEED_FORMAT、FEED_URI等单独配置项。要实现覆盖,需直接将FEEDS字典传入settings.set()方法,而非单独设置overwrite参数。
修改后的完整代码:
from scraper.spiders.pp_spider import ConverterSpider import scrapy from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings settings = get_project_settings() # 配置FEEDS字典,指定文件路径、格式及覆盖规则 settings.set('FEEDS', { 'result.json': { 'format': 'json', 'overwrite': True } }) process = CrawlerProcess(settings) process.crawl(ConverterSpider) process.start()
关键注意事项
- 不要同时混用旧版
FEED_*配置和新版FEEDS配置,避免出现配置冲突导致的异常 overwrite是FEEDS字典中对应文件的子配置项,不能作为顶级配置单独设置
内容的提问来源于stack exchange,提问作者Rodolfo
相关产品推荐
相关产品推荐

