Python3 Scrapy库安装使用教程
作者:xcLeigh
前言
Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。
一、Scrapy是什么?为什么选它?
在Python爬虫领域,我们可能用过requests(发送请求)+BeautifulSoup(解析页面)的组合,但这类工具更适合简单的小规模爬取。如果需要处理大规模爬取、自动去重、请求频率控制、数据持久化等复杂需求,Scrapy会是更优选择。
Scrapy是一个全功能的Python爬虫框架,内置了请求处理、错误重试、状态跟踪、分布式爬取等核心能力,支持高度自定义扩展,广泛用于数据挖掘、信息采集、历史数据存储等场景。
二、第一步:安装Scrapy
Scrapy的安装非常简单,通过pip即可完成,适用于Windows、Mac、Linux全平台。
安装命令
打开终端(Windows用CMD或PowerShell,Mac/Linux用Terminal),执行:
pip install scrapy
验证安装
安装完成后,执行以下命令查看版本,若正常输出则安装成功:
scrapy version

注意:若Windows系统安装时出现依赖错误(如pywin32相关报错),可先执行pip install pywin32,再重新安装Scrapy。
三、第二步:了解Scrapy项目结构
Scrapy采用结构化目录管理项目,通过命令行工具快速创建项目。
1. 创建Scrapy项目
执行以下命令,创建一个名为douban_crawler的项目(项目名可自定义):
scrapy startproject douban_crawler
2. 项目目录解析
创建完成后,目录结构如下(关键文件已标注作用):
douban_crawler/ # 项目根目录
├─ scrapy.cfg # 项目全局配置文件(如部署相关)
└─ douban_crawler/ # 项目核心代码目录
├─ __init__.py
├─ items.py # 定义数据模型(存储爬取到的数据结构)
├─ middlewares.py # 中间件(处理请求/响应,如设置代理、UA)
├─ pipelines.py # 数据管道(清洗、存储数据,如存CSV/数据库)
├─ settings.py # 项目核心配置(请求延迟、并发数、UA等)
└─ spiders/ # 爬虫脚本目录(核心爬取逻辑在这里)
└─ __init__.py四、第三步:Scrapy核心组件详解
Scrapy的工作流程依赖5个核心组件,理解它们的作用是编写爬虫的基础:
| 组件 | 作用说明 |
|---|---|
| Spider | 爬虫核心脚本,定义“爬哪些页面”“怎么提取数据”,包含初始URL和数据解析逻辑。 |
| Item | 数据模型,类似Python的类,用于规范爬取数据的字段(如电影的“标题”“评分”)。 |
| Pipeline | 数据处理管道,爬虫提取数据后,在这里进行清洗(如去重)、存储(如存CSV)。 |
| Middleware | 中间件,介于引擎和请求/响应之间,用于修改请求头、处理Cookie、设置代理等。 |
| Settings | 全局配置,控制爬虫的行为(如请求延迟、并发数、是否遵守robots协议)。 |
五、实战:爬取豆瓣电影Top250
接下来我们通过一个完整案例,从0到1实现豆瓣电影Top250的数据爬取,步骤清晰可复现。
目标
提取豆瓣电影Top250的电影标题、评分、一句话简介,并保存到CSV文件中。
步骤1:创建爬虫脚本
进入项目根目录(douban_crawler),执行以下命令创建名为movie_spider的爬虫,指定爬取域名为movie.douban.com:
cd douban_crawler scrapy genspider movie_spider movie.douban.com
执行后,spiders目录下会生成movie_spider.py文件,初始代码如下:
import scrapy
class MovieSpiderSpider(scrapy.Spider):
name = "movie_spider" # 爬虫名称(唯一)
allowed_domains = ["movie.douban.com"] # 允许爬取的域名
start_urls = ["https://movie.douban.com"] # 初始爬取URL
def parse(self, response):
pass # 数据解析逻辑待编写步骤2:配置Settings.py(关键!防反爬)
豆瓣有反爬机制,需修改settings.py中的配置,模拟正常用户行为,避免IP被封:
# 1. 设置User-Agent(模拟浏览器请求) USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' # 2. 不遵守robots.txt协议(豆瓣robots禁止爬取Top250,学习用途可关闭) ROBOTSTXT_OBEY = False # 3. 设置下载延迟(2秒/次,避免请求过快) DOWNLOAD_DELAY = 2 # 4. 启用自动限速(根据网站响应调整请求速度) AUTOTHROTTLE_ENABLED = True AUTOTHROTTLE_START_DELAY = 2 # 初始延迟 AUTOTHROTTLE_MAX_DELAY = 5 # 最大延迟
步骤3:编写爬虫核心逻辑(movie_spider.py)
修改movie_spider.py,实现“请求页面→提取数据→分页爬取”的完整逻辑:
import scrapy
class MovieSpiderSpider(scrapy.Spider):
name = "movie_spider"
allowed_domains = ["movie.douban.com"]
# 初始URL:豆瓣电影Top250首页(第1页)
start_urls = ["https://movie.douban.com/top250"]
# 1. 自定义初始请求(添加Referer,增强模拟浏览器效果)
def start_requests(self):
headers = {
# 已在Settings中设置UA,这里可补充Referer(表明请求来源)
'Referer': 'https://movie.douban.com/'
}
for url in self.start_urls:
# 生成请求,指定回调函数为parse(处理响应)
yield scrapy.Request(url=url, headers=headers, callback=self.parse)
# 2. 解析页面数据(核心方法)
def parse(self, response):
# ① 提取当前页所有电影项(豆瓣Top250每页25部电影)
movie_list = response.css('div.item') # CSS选择器定位电影列表
for movie in movie_list:
# 提取单部电影的字段
yield {
# 电影标题(取第一个span.title的文本)
'title': movie.css('span.title::text').get(),
# 电影评分(span.rating_num的文本)
'rating': movie.css('span.rating_num::text').get(),
# 一句话简介(span.inq的文本,若没有则为None)
'quote': movie.css('span.inq::text').get()
}
# ② 处理分页(爬取下一页)
# 定位“下一页”链接(span.next下的a标签的href属性)
next_page = response.css('span.next a::attr(href)').get()
if next_page is not None:
# 生成下一页的请求,回调函数仍为parse(循环解析)
yield response.follow(next_page, callback=self.parse)步骤4:运行爬虫并保存数据
执行以下命令,启动movie_spider爬虫,并将数据保存到douban_top250.csv文件中:
scrapy crawl movie_spider -o douban_top250.csv
scrapy crawl movie_spider:启动名为movie_spider的爬虫-o douban_top250.csv:将爬取结果输出到CSV文件(支持JSON、XML等格式)
结果查看
运行完成后,项目根目录会生成douban_top250.csv文件,用Excel或文本编辑器打开即可看到提取的数据:
| title | rating | quote |
|---|---|---|
| 肖申克的救赎 | 9.7 | 希望是件好东西,也许是世上最好的东西。 |
| 霸王别姬 | 9.6 | 说的是一辈子!差一年,一个月,一天,一个时辰,都不算一辈子! |
六、Scrapy常用方法与设置汇总
掌握以下常用方法和配置,能应对80%的爬虫场景:
1. 核心爬虫方法
| 方法名 | 作用说明 | 示例代码 |
|---|---|---|
start_requests() | 生成初始请求(可自定义请求头、方法) | yield scrapy.Request(url, callback=self.parse) |
parse(response) | 解析响应,提取数据或生成新请求 | title = response.css('h1::text').get() |
response.follow() | 自动处理相对URL,生成下一页请求 | yield response.follow(next_page, callback=self.parse) |
response.css() | 用CSS选择器提取数据 | movie.css('span.title::text').get() |
response.xpath() | 用XPath选择器提取数据(更灵活) | movie.xpath('//span[@class="title"]/text()').get() |
2. 关键配置(Settings.py)
| 配置项 | 作用说明 | 推荐值 |
|---|---|---|
USER_AGENT | 模拟浏览器标识,防反爬 | 见步骤2中的Chrome UA |
DOWNLOAD_DELAY | 请求延迟(秒),避免IP被封 | 2-5 |
CONCURRENT_REQUESTS | 并发请求数(默认16),根据网站性能调整 | 8-16 |
ITEM_PIPELINES | 启用数据管道(如存储到数据库) | {'douban_crawler.pipelines.MyPipeline': 300} |
七、爬取注意事项
- 遵守网站规则:优先查看目标网站的
robots.txt(如https://movie.douban.com/robots.txt),非学习用途请勿违反规则。 - 控制爬取频率:设置
DOWNLOAD_DELAY和AUTOTHROTTLE_ENABLED,避免给服务器造成过大压力。 - 避免IP封禁:若爬取量较大,可通过
Middleware设置代理IP池,轮换IP地址。 - 合法使用数据:爬取的数据仅用于学习和研究,不得用于商业用途或侵犯他人权益。
八、总结与扩展
通过本文,你已经掌握了Scrapy的安装、项目结构、核心组件和实战流程。接下来可以尝试以下扩展方向:
- 数据存储:在
pipelines.py中编写逻辑,将数据保存到MySQL、MongoDB等数据库。 - 代理IP配置:在
middlewares.py中添加代理中间件,解决IP封禁问题。 - 复杂页面爬取:针对JavaScript渲染的页面(如动态加载内容),结合
Scrapy-Selenium或Playwright爬取。
Scrapy的功能远不止于此,更多高级特性(如分布式爬取、信号机制)可参考Scrapy官方文档。动手实践是掌握爬虫的最佳方式,赶紧尝试爬取你感兴趣的网站吧!
到此这篇关于Python3 Scrapy库安装使用教程的文章就介绍到这了,更多相关Python Scrapy库安装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
