前言
Scrapy爬虫框架结构
- 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合
- 爬虫框架是一个半成品,能够帮助用户实现专业的网络爬虫
- 约束了用户使用的模板
5+2结构
5表示的是SPIDERS、ENGINE、ITEM PIPELINES、DOWNLOADER、SCHEDULER这五个模块
2表示SPIDERS与ENGINE链接的中间键和ENGINE与DOWNLOADER链接的中间键
三条主要数据流路径
路径一:1 -> 2
从SPIDERS经过ENGINE到达SCHEDULER
ENGINE从SPIDERS获取爬取用户的请求叫做requests,ENGINE将爬取请求转交给SCHEDULER模块,SCHEDULER模块负责对爬取请求做调度。
路径二:3 -> 4 -> 5 -> 6
ENGINE模块从SCHEDULER模块获取下一个要爬取的网络请求,这个时候是真实的要去网络上爬取的请求,ENGINE模块获得请求后通过中间键发送给DOWNLOADER模块,它拿到请求后真实的链接互联网,并且爬取相关的网页,爬取之后,DOWNLOADER模块将形成的内容创建成一个对象叫response响应对象。封装成response后通过中间键传给ENGINE发送给SPIDERS,这一条路径一个真实的爬取url的请求,经过SCHEDULER、DOWNLOADER最终返回了相关内容给SPIDERS。
路径三:7 -> 8
SPIDERS处理从DOWNLOADER获得的响应(网络爬取获得的相关内容),产生两个数据类型一个叫爬取项(scrapy item)ITEM,另一个是新的爬取请求。SPIDERS生成两个数据类型后将他传给ENGINE,ENGINE模块分析两种类型数据,如果我们爬取一个链接然后产生了新的链接我们也是感兴趣的,我们可以继续将新的requests传给SCHEDULER,走我们的路径二,这样可以实现爬取多个网页,ITEMS数据则直接发送给ITEM PIPELINES模块处理。
框架出入口
入口:SPIDERS
出口:ITEM PIPELINES
中转站:ENGINE
已实现的模块
下图三个模块,框架已经给我们实现了,用户不用去编写他们,他们会按照既定的功能完成他们的任务:
用户实现的模块
- SPIDERS:用来向整个框架提供访问的URL链接,同时解析网络上页面获得的内容
- ITEM PIPELINE:负责对提取的信息进行处理
框架解析
ENGINE:
- 控制所有模块之间的数据流
- 根据条件触发事件
- 不需要用户修改
DOWNLOADER:
- 根据用户提供的请求,下载网页
- 不需要用户修改
SCHEDULER:
- 对所有爬取请求进行调度管理
- 不需要用户修改
DOWNLOADER MIDDLEWARE:
- 目的:实施ENGINE、SCHEDULER、DOWNLOADER之间进行用户可配置的控制
- 功能:修改丢弃、新增请求或者响应
- 用户可以编写配置代码
SPIDERS:
- 解析DOWNLOADER返回的响应
- 产生爬取项
- 产生额外的爬取请求
- 用户编写配置代码
ITEM PIPELINES:
- 以流水线处理SPIDERS产生的爬取项
- 由一组操作顺序组成,类似流水线,每个操作是一个ITEM PIPELINES类型
- 可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库
- 用户编写配置代码
SPIDERS MIDDLEWARE:
- 目的:对请求和爬取项的再处理
- 功能:修改、丢弃、新增请求或者爬取项
- 用户可以配置代码
request库和scrapy比较
相同点:
- 两者都可以进行页面请求和爬取,python爬虫的两个重要技术路线
- 两者可用性都好,文档丰富,入门简单
- 两者都没有处理js、提交表单、应对验证码等功能,需要扩展库
不同点: