恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Scrapy数据导出格式实战:JSON、CSV、XML到数据库的FEEDS配置全攻略
首页
资讯中心
/
Scrapy数据导出格式实战:JSON、CSV、XML到数据库的FEEDS配置全攻略
Scrapy数据导出格式实战:JSON、CSV、XML到数据库的FEEDS配置全攻略
发布时间:2026/9/3 23:06:38
Scrapy数据导出格式实战JSON、CSV、XML到数据库的FEEDS配置全攻略【免费下载链接】scrapyScrapy, a fast high-level web crawling scraping framework for Python.项目地址: https://gitcode.com/GitHub_Trending/sc/scrapy爬完数据只是第一步如何把数据导出才决定爬虫的实用价值。本文带你用最短时间掌握 Scrapy 的 Feed Exports数据导出功能一行命令生成 JSON / CSV / XML 文件再通过FEEDS设置实现批量导出、文件分批、FTP/S3 上传等高级玩法最后讲清楚导出到数据库的正确姿势。一、为什么必须学会数据导出配置Scrapy 把抓取的数据组织成一个个Item但 Item 只是内存里的 Python 对象任务结束就消失了。Feed Exports 是 Scrapy 内置的落地机制爬取过程中每个 Item 都会被序列化JSON、CSV、XML 等写入你指定的位置无需自己写文件操作代码。它位于 Item Pipeline 之后是数据离开 Scrapy 引擎的最后一站 核心结论小任务用命令行-o正式项目用settings.py里的FEEDS字典。二、一分钟上手命令行 -o 导出scrapy crawl命令自带--output简写-o参数文件扩展名决定格式命令示例输出格式scrapy crawl quotes -o items.jsonJSONscrapy crawl quotes -o items.csvCSVscrapy crawl quotes -o items.xmlXMLscrapy crawl quotes -o items.jsonlJSON Lines每行一个JSON适合大数据scrapy crawl quotes -o -直接输出到标准输出如果扩展名不够用还可以用冒号显式指定-o myfile:csv。格式与导出器的对应关系定义在 scrapy/extensions/feedexport.py源码默认映射见 scrapy/settings/default_settings.py 中的FEED_EXPORTERS_BASE。三、FEEDS 设置正式项目的标准配置在 settings.py 中定义FEEDS字典每个键是一个导出文件路径值是该文件的配置项。一次爬取可以同时导出多个文件FEEDS { items.json: {format: json, encoding: utf-8, indent: 4}, items.csv: {format: csv, fields: [title, price]}, items.xml: {format: xml, store_empty: False}, }常用配置项速查配置项作用新手建议format序列化格式必填json/jsonlines/csv/xmlencoding文件编码统一用utf-8避免中文乱码fields指定导出字段及顺序CSV 强烈建议配置表头固定item_classes只导出指定 Item 类多数据源时做隔离store_empty是否保存空文件默认True调试期建议关掉indentJSON/XML 缩进空格数调试设 4生产保持 0overwrite覆盖还是追加本地默认追加重复跑任务前先删文件postprocessing导出后处理插件可挂GzipPlugin自动压缩六个内置导出格式怎么选格式适用场景注意点json通用交换、API 对接大文件会占用大量内存jsonlines大数据量、逐行流式处理大数据首选csv表格分析、Excel 打开需配fields固定列顺序xml对接 XML 系统结构嵌套最清晰pickle仅 Python 生态内部流转有安全风险不要跨系统传递marshal同 pickle仅限内部不建议对外使用各格式对应的导出器源码在 scrapy/exporters.py想扩展自定义格式如导出纯文本时实现一个 Exporter 并注册到FEED_EXPORTERS即可。四、文件命名与存储位置URI 参数 存储后端1. 让文件名带上时间戳和爬虫名导出路径支持%(time)s、%(name)s占位符甚至能引用爬虫的同名属性FEEDS { feeds/%(name)s/%(time)s.json: {format: json}, }这样每次运行都会生成独立文件不会互相覆盖非常适合定时任务场景。2. 内置存储后端通过 URI 前缀切换存储位置默认支持六种定义同样在 scrapy/extensions/feedexport.py 的FEED_STORAGES_BASE方案示例说明本地文件items.json或file:///tmp/items.json唯一可省略协议头的标准输出stdout:配合管道命令处理FTP / FTPSftps://user:passhost/items.csvFTPS 走 TLS 加密优先选用S3s3://mybucket/items.csv需安装s3扩展依赖GCSgs://mybucket/items.csv需安装gcs扩展依赖⚠️ 注意FTP / S3 / GCS 这类远程后端采用延迟上传——爬取结束后才把本地临时文件推上去。若想边爬边传用下一节的批量导出。3. 分批导出大文件设置FEED_EXPORT_BATCH_ITEM_COUNT 100每满 100 条就生成一个新文件并上传文件名中可用%(batch_id)d批次序号和%(batch_time)s区分feeds/1-items2026-09-02T02-10-00.json feeds/2-items2026-09-02T02-12-30.json这对数据及时可见的监控型爬虫非常实用。五、导出到数据库的正确姿势标题里写了到数据库这里要澄清一个高频误区Scrapy 的 FEEDS 只负责文件/对象存储类导出不直接写数据库。直接落库的正确姿势是把活交给 Item Pipeline在 scrapy/pipelines/ 风格下自建一个 Pipeline 类在process_item里用 SQLAlchemy 或 ORM 把 Item 写入 MySQL / PostgreSQL / MongoDB在settings.py的ITEM_PIPELINES中注册它。更推荐的做法是导出与入库解耦爬虫先把数据导出成jsonlines文件再由独立脚本批量导入数据库。好处显而易见——爬虫挂了不用回滚数据库数据可以反复校验和重放。六、新手避坑清单中文乱码FEED_EXPORT_ENCODING utf-8一行解决别用系统默认编码。CSV 列顺序乱务必用fields显式声明列否则以先出现先排的规则排列。重复运行数据翻倍本地文件默认是追加模式重复跑任务要么换文件名要么设overwrite: True。JSON 大文件内存爆改用jsonlines逐行写入不占内存。空数据刷空文件设置store_empty: False没爬到数据就不生成文件。远程导出一直不出现文件正常现象属于延迟交付机制等待爬取结束或分批触发即可。结语回顾一下完整路线-o快速试跑 →FEEDS多格式并发导出 → URI 参数防覆盖 → 批量交付保时效 → Pipeline 落库。掌握这套 Scrapy 数据导出配置你的爬虫就能从能爬进化到可用。 延伸阅读完整文档docs/topics/feed-exports.rst导出器参考docs/topics/exporters.rst相关测试tests/test_feedexport.py【免费下载链接】scrapyScrapy, a fast high-level web crawling scraping framework for Python.项目地址: https://gitcode.com/GitHub_Trending/sc/scrapy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考