在当今数据驱动的时代,网络爬虫技术已经成为获取互联网数据的重要手段,无论是市场分析、舆情监控,还是学术研究,爬虫都能帮助我们高效地收集所需信息,而 Scrapy 作为 Python 生态中最强大的爬虫框架之一,以其高效、灵活和可扩展性,成为众多开发者的首选。
本文将带你从零开始,深入浅出地学习 Scrapy 框架的实战开发,涵盖环境搭建、项目创建、爬虫编写、数据存储等关键环节,并通过一个完整的实战案例,帮助你掌握 Scrapy 的核心用法。
为什么选择 Scrapy?
在 Python 生态中,爬虫开发有多种方式,如:
- Requests + BeautifulSoup(适合简单爬取)
- Selenium(适合动态渲染页面)
- Scrapy(适合大规模、高效率爬取)
Scrapy 的优势:
✅ 高性能:基于异步网络库 Twisted,爬取速度快
✅ 模块化设计:组件化架构,易于扩展和维护
✅ 内置功能:支持自动去重、中间件、管道等高级功能
✅ 数据导出:支持 JSON、CSV、数据库等多种存储方式
如果你需要 大规模、高效率地爬取数据,Scrapy 是最佳选择。
环境搭建
1 安装 Scrapy
在开始之前,请确保你的 Python 版本 ≥ 3.6,然后使用 pip 安装 Scrapy:
pip install scrapy
注意:在 Windows 上安装时,可能会遇到依赖问题,可以尝试:
pip install scrapy --upgrade或者使用
conda安装:conda install -c conda-forge scrapy
2 验证安装
运行以下命令,检查 Scrapy 是否安装成功:
scrapy version
如果输出类似 Scrapy 2.11.0,说明安装成功。
创建 Scrapy 项目
1 新建项目
使用 scrapy startproject 命令创建一个新的爬虫项目:
scrapy startproject myspider
这会生成一个项目目录结构:
myspider/
scrapy.cfg # 项目配置文件
myspider/ # 项目核心代码
__init__.py
items.py # 定义数据结构
middlewares.py # 中间件
pipelines.py # 数据处理管道
settings.py # 项目设置
spiders/ # 爬虫代码存放目录
__init__.py
2 创建爬虫
进入项目目录,并创建一个爬虫:
cd myspider scrapy genspider example example.com
这会在 spiders/ 目录下生成一个 example.py 文件,即我们的爬虫代码。
编写第一个爬虫
1 分析目标网站
以 豆瓣电影 Top 250(https://movie.douban.com/top250)为例,我们要爬取电影名称、评分和简介。
2 编写爬虫代码
打开 spiders/example.py,修改代码如下:
import scrapy
class ExampleSpider(scrapy.Spider):
name = "douban" # 爬虫名称
start_urls = ["https://movie.douban.com/top250"] # 起始URL
def parse(self, response):
# 提取电影信息
for movie in response.css("div.item"):
yield {
"title": movie.css("span.title::text").get(), # 电影名称
"rating": movie.css("span.rating_num::text").get(), # 评分
"quote": movie.css("span.inq::text").get(), # 简介(可能为空)
}
# 翻页逻辑
next_page = response.css("span.next a::attr(href)").get()
if next_page:
yield response.follow(next_page, self.parse) # 自动跳转到下一页
代码解析:
name:爬虫的唯一标识,运行时使用scrapy crawl douban。start_urls:爬虫起始的 URL 列表。parse:默认的回调函数,用于解析响应数据。response.css():使用 CSS 选择器提取数据。yield:返回提取的数据(字典形式)。response.follow():自动构造下一页的请求并继续爬取。
运行爬虫并保存数据
1 运行爬虫
在项目根目录下运行:
scrapy crawl douban -o movies.json
crawl douban:运行名为douban的爬虫。-o movies.json:将爬取的数据保存为movies.json文件。
其他输出格式:
- CSV:
-o movies.csv - JSON Lines:
-o movies.jl - 数据库(MySQL/MongoDB):需结合
pipelines.py实现(后续讲解)。
2 查看结果
运行后,当前目录会生成 movies.json类似:
[
{"title": "肖申克的救赎", "rating": "9.7", "quote": "希望让人自由。"},
{"title": "霸王别姬", "rating": "9.6", "quote": "风华绝代。"},
...
]
进阶:数据处理与存储
1 使用 Items 定义数据结构
在 items.py 中定义数据模型:
import scrapy
class MovieItem(scrapy.Item):= scrapy.Field()
rating = scrapy.Field()
quote = scrapy.Field()
然后在爬虫中使用:
def parse(self, response):
for movie in response.css("div.item"):
item = MovieItem()
item["title"] = movie.css("span.title::text").get()
item["rating"] = movie.css("span.rating_num::text").get()
item["quote"] = movie.css("span.inq::text").get()
yield item
2 使用 Pipelines 处理数据
在 pipelines.py 中可以加入数据清洗、去重或存储到数据库的逻辑:
class MyspiderPipeline:
def process_item(self, item, spider):
# 可以在这里清洗数据,如去除空格、转换类型等
return item
在 settings.py 中启用 Pipeline:
ITEM_PIPELINES = {
'myspider.pipelines.MyspiderPipeline': 300,
}
反爬虫策略应对
实际爬取时,网站可能会有反爬机制,如:
- User-Agent 检测 → 在
settings.py中设置随机 UA - IP 封禁 → 使用代理 IP 或降低爬取速度
- 验证码 → 结合 Selenium 或打码平台
示例:设置 User-Agent 和下载延迟
# settings.py USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..." DOWNLOAD_DELAY = 2 # 每2秒爬取一次,避免被封
本文介绍了 Scrapy 框架的核心用法,包括:
- 环境搭建(安装 Scrapy)
- 项目创建(
scrapy startproject和genspider) - 爬虫编写(CSS/XPath 选择器、翻页逻辑)
- 数据存储(JSON/CSV/数据库)
- 进阶技巧(Items、Pipelines、反爬应对)
Scrapy 是一个功能强大的爬虫框架,掌握它后,你可以轻松应对 大规模、高效率的网络数据采集 任务,建议你:
- 多练习不同网站的爬取(如电商、新闻、社交媒体)
- 学习 Scrapy + Redis 实现分布式爬虫
- 探索 Scrapy + Selenium 处理动态页面
你就已经具备了用 Scrapy 开发专业爬虫的能力!🚀


还没有评论,来说两句吧...