从零搭建可运行、可调试、可导出数据的scrapy项目需严格遵循步骤:创建标准结构、定义item字段、编写爬虫逻辑、配置pipeline、导出csv/json;任一环节出错将导致parse不触发或数据丢失。

从零开始搭建一个可运行、可调试、可导出数据的Scrapy项目,需要严格遵循其目录结构和组件职责,跳过任意一步都可能导致parse函数不触发、item无法进入pipeline或爬虫直接静默退出。
创建标准项目结构
在终端中执行命令,生成带完整骨架的项目:
scrapy startproject mycrawler
这一步必须在空目录下执行,【如果当前目录已存在 scrapy.cfg 或同名 Python 包,命令会报错并中断】。执行后将生成 mycrawler/ 文件夹,内部包含 scrapy.cfg、mycrawler/ 子目录及 items.py、pipelines.py、settings.py、middlewares.py 和 spiders/ 等关键文件。
进入项目根目录:
cd mycrawler
定义待采集的数据结构
打开 mycrawler/items.py,删除默认注释,写入明确字段:
import scrapy
class BookItem(scrapy.Item):
title = scrapy.Field()
price = scrapy.Field()
rating = scrapy.Field()
url = scrapy.Field()
字段名必须与后续 parse 中 yield 的键名完全一致,大小写敏感。Scrapy 不校验字段是否存在,但拼错会导致该字段在 pipeline 中始终为 None。
生成并编写爬虫文件
在 spiders/ 目录下创建爬虫:
scrapy genspider bookspider books.toscrape.com
该命令自动生成 bookspider.py 并预填域名白名单、start_urls 和 parse 框架。注意:生成的 start_urls 默认是 http 协议,若目标站强制 https,需手动改为 https,否则请求会被 downloader 拦截并静默失败。
编辑 spiders/bookspider.py,替换 parse 方法为:
def parse(self, response):
for book in response.css('article.product_pod'):
item = BookItem()
item['title'] = book.css('h3 a::attr(title)').get()
item['price'] = book.css('p.price_color::text').re_first(r'(\d+\.\d+)')
item['rating'] = book.css('p.star-rating::attr(class)').re_first(r'star-(\w+)')
item['url'] = response.urljoin(book.css('h3 a::attr(href)').get())
yield item
next_page = response.css('li.next a::attr(href)').get()
if next_page:
yield response.follow(next_page, callback=self.parse)
启用并配置数据管道
打开 mycrawler/pipelines.py,在 class BookPipeline 中实现 process_item 方法:
def process_item(self, item, spider):
if not item.get('title') or not item.get('price'):
raise DropItem(f"Missing title or price in {item}")
return item
然后打开 settings.py,取消 ITEM_PIPELINES 字典的注释,并填入:
ITEM_PIPELINES = {
'mycrawler.pipelines.BookPipeline': 300,
}
【此处数字 300 不可省略,且必须为整数;若写成 '300' 字符串或留空,pipeline 将完全不生效】
运行爬虫并导出 CSV 数据
方法一:命令行直接导出(适合快速验证)
scrapy crawl bookspider -o books.csv
方法二:启用内置 CSV 导出器(需修改 settings.py)
FEEDS = {
'books.csv': {'format': 'csv', 'overwrite': True}
}
方法三:导出 JSON(保留嵌套结构)
scrapy crawl bookspider -o books.json
执行后,CSV 文件将按字段顺序生成表头,空字段显示为 null;JSON 则以数组形式保存每条 item。若未生成文件,请检查终端是否输出 “Saved file” 提示——没有该提示说明爬虫未 yield 任何 item,大概率是 CSS 选择器写错或网站结构已变更。











