介绍
Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性强,可以灵活完成各种需求
结构介绍
它可以分为以下几个部分
- Engine :引擎 -- 处理整个系统的数据流 / 触发事件,是整个框架的核心
- Item : 项目 -- 它定义了爬去结果的数据结构,爬去的数据会被赋值成该 Item 对象
- Scheduler :调度器 -- 接受引擎发送过来的请求并将其加入队列中。在引擎在次请求的时候将请求提供给引擎
- Downloader :下载器 -- 下载网页内容。并将网页内容返回给爬虫文件
- Spider :爬虫文件 -- 定义了爬去的逻辑和网页解析,它主要负责解析和响应并生成提取的结果和新的请求
- Item Pipline :管道 -- 负责由爬虫文从网页中的数据进行清洗 / 验证和存储
- Downloader Middlewares :下载中间件 -- 位于引擎和下载器之间的钩子框架,处理引擎和下载器之间的请求及响应
- Spider Middlewares :爬虫中间件 -- 位于引擎和爬虫文件之间的钩子框架,主要处理爬虫文件输入的响应和输出的结果及新的请求
数据流
Scrapy 中的数据流由引擎控制,数据流的过程如下:
- Engine 打开一个网站,找到处理该网站的 Spider。并向该 Spider 请求第一个要爬取的 URL
- Engine 从 Spider 中国区第一个要爬去的 URL,并通过 Scheduler 以及 Request 的形式调度
- Engine 向 Scheduler 请求下一个要爬取的 URL
- Schedler 返回下一个要爬取的 URL 给 Engine ,Engine将 URL 通过Downloader Middlewares 转发给 Downloader 下载
- 一旦页面下载完毕, Downloader 生成该页面的 Response, 并将其通过 Downloader Middlewares 发送给 Engine
- Engine 从下载器中接收到 Response, 并将其通过 Spider Middlewares 发送给 Spider 处理
- Spider 处理 Response ,并返回爬取到的 Item 及新的 Response 给 Engine
- Engine 将 Spider 返回的 Item 给 Item Pipline,将新的 Request 给 Scheduler
- 重复 2--8 之间的操作,直到 Scheduler 中没有更多的 Request, Engine 关闭该网页,爬取结束
项目结构
- scrapy.cfg :它是 Scrapy 的配置文件,定义了项目的配置文件路径 / 部署相关信息等内容
- items.py :它定义了 Item 数据结构,所有的 Item 的定义都可以放在这里
- pioelines.py : 它定义了 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放在这里
- settings.py :它定义项目的全局配置
- middlewares.py : 它定义 Spider Middlewares 和Downloader Middlewars 的实现
- spiders :包含一个个的 Spider 的实现,每个 Spider 都有一个文件
使用
创建项目
scrapy startproject first
创建爬虫文件
cd first scrapy genspider firstboold www.xxx.com
进入 项目文件夹下,然后执行 genspider 命令 ,'firstboold'为文件的名字(自定义),'www.xxx.com'为岂是URL(在文件中可更改)
配置文件
在配置文件(settings.py)中设置User-Agent / 日志等级 / 是否遵从 RBOTES协议 / 开启管道等
启动
scrapy crawl firstboold