Scarpy源码分析3

2021SC@SDUSC

2 框架有哪些功能
要知道一个框架有些什么功能,可以看它的官方文档。

Scrapy 的主要部件有 Engine、Spider、Scheduler、Downloader、Item Pipelines 以及中间件。

更详细的功能,我们就可以通过主要部件去联想。比如:

Spider 涉及 Request、Response、Selector、Extractor
Scheduler 涉及去重的 DupeFilter
Downloader 涉及并发量、下载延时等设置
Item Pipelines 涉及 Items、Item Loaders、Feed Exports
至于中间件,在 Spider 和 Engine 中间的是 Spider Middleware,在 Engine 和 Downloader 中间的是 Downloader Middleware
除此之外,文档上还列了一些内置服务以及解决特定问题的示例,比如:Stats Collection 可以用于统计;Telnet Console 可以查看运行时爬虫的状态、内存使用情况等;对于广度优先的爬虫怎么设置;等等。

上面的联想只是作为一个参考,不同的人有不同的联想方式。

这样一来,我们就了解了框架的大部分功能了。

Spider 就是我们常写的那个 spider 文件,Engine 从 start_urls 或者 start_requests 中获取初始请求
Engine 将请求加入 Scheduler 并从中获取下一个请求
Scheduler 返回给 Engine 下一个请求
Engine 将请求发送给 Downloader,这会调用 Downloader Middleware 中的 process_request
当 Downloader 下载完毕后会生成一个响应发送给 Engine,这会调用 Downloader Middleware 的 process_response
Engine 收到 Downloader 生成的响应后会将其发送给 Spider,这会调用 Spider Middleware 的 process_spider_input
当 Spider 处理完响应后,会将生成的 Items 或者新的请求发送给 Engine,这会调用 Spider Middleware 的 process_spider_output
如果 Spider 发送给 Engine 的有 Items,Engine 会将 Item 发送给 Item Pipelines;如果有新的请求,会将其加入 Scheduler;如果 Scheduler 还有未处理的请求的话,Engine 会向其获取下一个请求
重复步骤 1 直到 Scheduler 中的请求被处理完

3.1 了解常见的几个类以及它们的关系

先理清楚几个类的关系
Crawler 可以理解为爬虫的一个容器
CrawlerRunner 对 Crawler 做了一些封装,可以让我们更方便的运行爬虫。类似的还有 CrawlerProcess,它是 CrawlerRunner 的子类
Spider 就是我们编写爬虫文件时依赖的类,ExecutionEngine 则是 Scrapy 调度的核心
ExecutionEngine 的几个重要属性

spider,Crawler 中传递过来的 Spider 对象
slot,插槽,用于请求存储以及调度
scheduler,一般是 scrapy.core.scheduler. Scheduler 的对象
downloader,一般是 crapy.core.downloader. Downloader 的对象
scraper,一般是 scrapy.core.scraper. Scraper 的对象
上面的 spider、scheduler、downloader 的作用与之前数据流中对应部件的作用一致,scraper 与 Spider Middleware 和 Item Pipelines 有关。

另外,除了 ExecutionEngine 有 slot 属性外,downloader 和 scraper 都有对应的 slot,前者使用多个 slot 进行并发控制、延迟下载以及记录下载中的请求,后者用于记录响应和对应的请求。

上一篇:Scrapy


下一篇:Scrapy框架: middlewares.py设置