Scrapy多爬虫输出文件名自定义:时间戳+网站名配置问询
我来给你几个实用的方案,完美解决这个需求,不用太复杂的改动:
方案1:命令行直接生成(无需改代码)
如果你不想动项目代码,直接在启动爬虫的命令里用shell命令生成带时间戳的文件名就行,非常快捷:
Linux/macOS 终端:
用date命令生成你要的时间戳格式,拼接爬虫名(也就是网站名):scrapy crawl crawlera -o "$(date +%Y%m%d%H%M%S)_crawlera.json"这里
%Y%m%d%H%M%S会生成类似20240520143522的时间戳,你可以根据需求调整格式(比如去掉秒就用%Y%m%d%H%M)。Windows PowerShell:
用Get-Date命令实现同样效果:scrapy crawl crawlera -o "$(Get-Date -Format 'yyyyMMddHHmmss')_crawlera.json"
这个方法的好处是零代码改动,适合临时或者快速执行的场景。
方案2:通过Scrapy配置自动生成(更优雅)
如果希望每次运行爬虫时不用手动拼命令,让系统自动生成符合要求的文件名,推荐修改项目的settings.py,利用Scrapy自带的Feed导出占位符:
打开项目根目录下的
settings.py,添加以下配置:# 设置输出文件的命名规则:时间戳 + 爬虫名 FEED_URI = '%(time)s_%(name)s.json' # 设置输出格式为JSON FEED_FORMAT = 'json' # 自定义时间戳的格式(默认是带横杠的,改成纯数字格式) FEED_EXPORT_TIMESTAMP_FORMAT = '%Y%m%d%H%M%S'这里的
%(name)s会自动替换成当前运行的爬虫名称(比如crawlera),%(time)s会按照你指定的格式生成时间戳。现在直接运行爬虫命令就行,不用加
-o参数了:scrapy crawl crawlera系统会自动生成类似
20240520143522_crawlera.json的文件。
进阶:如果爬虫名和网站名不一致怎么办?
比如你的爬虫名叫crawlera,但网站名是example_site,可以在每个爬虫的代码里单独设置custom_settings来覆盖全局配置:
import scrapy from your_project.items import YourItem class CrawleraSpider(scrapy.Spider): name = 'crawlera' # 定义网站名 website_name = 'example_site' start_urls = ['https://www.example.com'] # 单独配置当前爬虫的输出文件名 custom_settings = { 'FEED_URI': '%(time)s_' + website_name + '.json', 'FEED_EXPORT_TIMESTAMP_FORMAT': '%Y%m%d%H%M%S' } def parse(self, response): # 你的解析逻辑 item = YourItem() # 填充item字段 yield item
这样每个爬虫可以独立设置对应的网站名,生成的文件名就会是20240520143522_example_site.json,完全符合你的需求。
内容的提问来源于stack exchange,提问作者itsmnthn
相关产品推荐
相关产品推荐

