ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Scarpy源码分析3

2021-10-25 16:58:19  阅读:236  来源: 互联网

标签:分析 Engine 请求 Downloader Middleware Spider 源码 Scheduler Scarpy


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 进行并发控制、延迟下载以及记录下载中的请求,后者用于记录响应和对应的请求。

标签:分析,Engine,请求,Downloader,Middleware,Spider,源码,Scheduler,Scarpy
来源: https://blog.csdn.net/No_oneelse/article/details/120955073

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有