大家好,我是老周。上周接了个活——帮一个电商小团队抓取竞品价格数据。需求很简单:每天定时跑爬虫,数据既要给运营的同事直接用Excel打开(CSV格式),又要给数据分析组做历史趋势分析(存MySQL),还得留一份原始数据做备份(JSON格式)。
刚开始我图省事,跑三次爬虫,换三个不同的输出配置。结果呢?不仅浪费了三个小时,还因为三次请求时间不一致,导致三个文件里的数据量对不上,被客户怼了一顿。
后来我认真研究了一下Scrapy的Item Pipeline机制,写了一个“三栖管道”——一次爬取,数据同时写入JSON、CSV和MySQL。今天就把这个方案完整分享出来,希望对你有帮助。
目录
一、准备工作:环境搭建与项目创建
1.1 环境要求
1.2 安装依赖包
1.3 创建Scrapy项目
二、定义Item:数据结构的“合同”
三、编写爬虫:从网页中提取数据
四、Pipeline的进阶实现:三个管道各司其职
4.1 JSON管道:保留原始数据,方便调试和备份
4.2 CSV管道:给运营同事的“开箱即用”文件
4.3 MySQL管道:持久化存储,支持复杂查询
4.4 可选:图片/文件下载管道(扩展知识)
五、配置Settings:启用管道和数据库参数
创建MySQL数据库
六、敏感信息管理:不要把你的密码提交到Git
七、运行爬虫与验证结果
7.1 运行
7.2 验证JSON输出
7.3 验证CSV输出
7.4 验证MySQL
八、进阶优化:让你的管道更健壮
8.1 批量插入MySQL(性能提升10倍)
一、准备工作:环境搭建与项目创建
1.1 环境要求
我用的环境是:
Python 3.10+ (3.11也没问题)
Scrapy 2.11.0(目前最新稳定版)
MySQL 8.0(5.7也兼容,注意字符集设置)
pandas 2.0.3(用来写CSV更方便,但不是必须)
1.2 安装依赖包
打开终端,一条条执行:
bash
# 创建虚拟环境(推荐) python -m venv scrapy_env source scrapy_env/bin/activate