1 Scrapy 爬虫框架介绍
Scrapy 安装
win 平台:“以管理员身份运行” cmd,执行 pip install scrapy
安装后小测:执行 scrapy -h
Scrapy 爬虫框架基本信息
Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
Scrapy 不是一个函数功能库,而是一个爬虫框架。
什么是爬虫框架?
a) 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。
b) 爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。
2 Scrapy 爬虫框架解析
在五个模块之间,数据包括用户提交的爬虫请求以及从网络上获取的相关内容在这些结构之间进行流动形成数据流。Scrapy 框架包含三条主要的数据流路径。
- 1 Engine 从 spider 处获得爬取请求(Request)
- 2 Engine 将爬取请求转发给 scheduler,用于调度
- 3 Engine 从 Scheduler 处获得下一个要爬取的请求
- 4 Engine 将爬取请求通过中间件发送给 Downloader
- 5 爬取网页后,Downloader 形成响应(Response)通过中间件发给 Engine
- 6 Engine 将收到的响应通过中间件发送给 Spider 处理
- 7 Spider 处理响应后产生爬取项(scraped Item)和新的爬取请求(Requests)给 Engine
8 Engine 将爬取项发送给 Item Pipeline (框架出口)
9 Engine 将爬取请求发送给 scheduler
数据流的出入口
Engine 控制各模块数据流,不间断从 Scheduler 处获得爬取请求,直至请求为空
框架入口:Spider的初始爬取请求
框架出口:Item Pipeline
“5+2” 结构:五个框架的主体部分(模块),两个中间件
- Scrapy Engine (引擎):负责其它四个模块中间的通讯,信号、数据传递等。
- Scheduler (调度器):它负责接受引擎发送过来的 Request 请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
- Downloader (下载器):负责下载 Engine (引擎)发送的所有 Requests 请求,并将其获取到的 Responses 交还给 Engine (引擎),由引擎交给 Spider 来处理。
- Spider (爬虫):它负责处理所有 Responses,从中分析提取数据,获取 Item 字段需要的数据,并将需要跟进的 URL 提交给引擎,再次进入 Scheduler (调度器)。
- Item Pipeline (管道):它负责处理 Spider 中获取到的 Item,并进行后期处理(详细分析、过滤、存储等)的地方。
-
Downloader Middlewares (下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
目的:实施 Engine、scheduler 和 Downloader 之间进行用户可配置的控制
功能:修改、丢弃、新增请求或响应
用户可以编写配置代码 -
Spider Middlewares (Spider 中间件):你可以理解为是一个可以自定扩展和操作引擎和 Spider 中间通信的功能组件(比如进入 Spider 的 Response 和从 Spider 出去的 Requests)
目的:对请求和爬取项的再处理
功能:修改、丢弃、新增请求或爬取项
用户可以编写配置代码
从上述介绍, 我们可以看到框架中的五个模块形成了既定的功能, 那么我们重点编写的是 Spider 模块和 Item Pipelines 模块, 用户为了去操作其中的数据流,对数据流进行一定的控制, 可以通过两个中间件对其中的 Request、Response 和 Item 做一定的操作。
Scrapy = Scrach + Python
3 Requests 库和 Scrapy 爬虫的比较
相同点∶
a) 两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
b) 两者可用性都好,文档丰富,入门简单
c) 两者都没有处理js、提交表单、应对验证码等功能(可扩展)
选用哪个技术路线开发爬虫呢?
- 非常小的需求,requests 库
- 不太小的需求,Scrapy 框架
- 定制程度很高的需求(不考虑规模),自搭框架,requests > Scrapy
4 Scrapy 爬虫的常用命令
Scrapy 命令行
Scrapy 是为持续运行设计的专业爬虫框架,提供操作的 Scrapy 命令行。win 下,启动 cmd 控制台
- 为什么 Scrapy 采用命令行创建和运行爬虫?
命令行(不是图形界面)更容易自动化,适合脚本控制。本质上,Scrapy 是给程序员用的,功能(而不是界面)更重要
Scrapy 常用命令