参考资料:Python网络爬虫与信息提取(北京理工大学慕课)
此处我们对Scrapy爬虫框架做进一步的解析:
回忆一下Scrapy爬虫框架的“5+2”结构:
其中整个框架的核心是 Engine。
任何模块和模块之间的数据流动都要经过 Engine 模块的调度。
Engine
- 控制所有模块之间的数据流
- 根据条件触发事件
- 不需要用户修改
Downloader:功能比较单一,只是获得一个请求,并且向网络中提交这个请求,最终获得返回的相关内容。
Downloader
- 根据请求下载网页
- 不需要用户修改
Scheduler:对于一个中规模爬虫,可能同一时间有很多对网络的爬取请求,哪些先访问,哪些后访问,由Scheduler模块进行调度。由于调度方法和调度功能相对的固定,因此不需要用户修改。
Scheduler
- 对所有爬取请求进行调度管理
- 不需要用户修改
这三个模块都不需要用户修改:
Engine、Downloader、Scheduler这三个模块都不需要用户修改。
但它们放在一起,却形成了一个功能:由 Scheduler 发送访问请求,经过 Engine,到达 Downloader。
中间件 Downloader Middleware:
Spider 模块:
简单说,它向整个框架提供了最初始的访问链接,同时对每次爬取回来的内容进行解析,再次产生新的爬取请求,并且从内容中分析出、提取出相关的数据,是整个爬虫框架最核心的一个单元。
Item Pipelines 模块:
-
以流水线方式处理Spider产生的爬取项。
-
由一组操作顺序组成,类似流水线,每个操作是一个 Item Pipeline 类型。
-
可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库。
-
甚至在流水线中前面的功能模块可以去掉 Item Pipeline 的后续操作。
-
需要用户编写配置代码。
Item Pipelines里边的功能是完全由用户来编写和定义的。 用户需要关心的是,对于从网页中提取出来的信息,这些以Items类型封装的信息, 用户希望怎么做,是将数据存储到数据库里,还是经过简单的清洗,用在什么地方。 这些是在Item Pipelines中实现的。
中间件 Spider Middleware:
总结一下:
框架中的五个模块形成了既定的功能,我们重点编写的是 Spiders 和 Item Pipelines 模块。
用户为了操作其中的数据流,对数据流进行一定的控制,可以通过两个中间键,对其中的 REQUESTS、RESPONSE 和 ITEMS 做一定的操作。