Scrapy框架原理及流程

这是一篇整理爬虫概念知识的文章。

Scrapy工作流程图

Scrapy数据流是由执行的核心引擎(engine)控制,流程是这样的:

1、爬虫引擎获得初始请求开始抓取。 

2、爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取。 

3、爬虫调度器返回下一个请求给爬虫引擎。 

4、引擎请求发送到下载器,通过下载中间件下载网络数据。 

5、一旦下载器完成页面下载,将下载结果返回给爬虫引擎。 

6、引擎将下载器的响应通过中间件返回给爬虫进行处理。 

7、爬虫处理响应,并通过中间件返回处理后的items,以及新的请求给引擎。 

8、引擎发送处理后的items到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取。 

9、重复该过程(继续步骤1),直到爬取完所有的url请求。

 

 

  • 爬虫引擎(ENGINE) 

爬虫引擎负责控制各个组件之间的数据流,当某些操作触发事件后都是通过engine来处理。

  • 调度器 (SCHEDULER)

调度接收来engine的请求并将请求放入队列中,并通过事件返回给engine。

  • 下载器 

通过engine请求下载网络数据并将结果响应给engine。

  • Spider 

Spider发出请求,并处理engine返回给它下载器响应数据,以items和规则内的数据请求(urls)返回给engine。

  • 管道项目(item pipeline) 

负责处理engine返回spider解析后的数据,并且将数据持久化,例如将数据存入数据库或者文件。

  • 下载中间件 

下载中间件是engine和下载器交互组件,以钩子(插件)的形式存在,可以代替接收请求、处理数据的下载以及将结果响应给engine。

  • spider中间件 

spider中间件是engine和spider之间的交互组件,以钩子(插件)的形式存在,可以代替处理response以及返回给engine items及新的请求集。

 

 

 

 

 

 

### Scrapy框架工作原理详解 Scrapy是一个基于Python编写的高效、高层次的爬虫框架,旨在帮助开发者轻松实现网络数据的获取与解析[^2]。此框架利用了Twisted异步网络库来提升其性能表现,在多线程环境下能够更迅速地完成大量网页请求的任务[^5]。 #### 主要组件介绍 为了更好地理解Scrapy的工作流程,先了解一下几个核心组成部分: - **Engine (引擎)**:负责控制整个系统的信号调度,协调其他各个部件之间的交互操作。 - **Scheduler (调度器)**:接收来自引擎发出的新URL链接并将它们加入队列等待被访问;同时也管理着这些待处理链接的状态变化情况。 - **Downloader Middleware(下载中间件)**:位于HTTP客户端层面上游位置的一组插件集合,可以在发送请求前或接收到响应之后对其进行修改调整。 - **Spiders (蜘蛛程序/爬虫类)**:用户自定义的具体业务逻辑单元,主要职责是从特定网站中抽取所需信息并将其传递给Item Pipeline做进一步加工处理。 - **Item Pipelines (项目管道)**:用于清洗、验证以及保存由Spider抓取回来的数据项至最终存储介质中的模块。 - **Spider Middlewares (蜘蛛中间件)**:类似于Downloader Middleware的作用范围但是作用于Spider层面之前,可用于拦截输入输出流并对之实施必要的转换动作。 - **Extensions (扩展功能)**:提供额外的服务特性比如统计监控等辅助工具集。 #### 工作流程概述 当启动一个Scrapy应用时,会经历如下一系列事件循环直至结束全部预定目标为止: 1. 引擎向某个已注册好的Spider实例发起调用`start_requests()`方法指令以获得初始一批Request对象列表; 2. 接下来把上述得到的结果提交给Scheduler暂存起来准备后续分发任务; 3. Scheduler按照一定策略挑选出下一个即将被执行的目标地址交给Engine安排实际执行计划; 4. Engine通过Downloader Manager去真正意义上触发一次完整的HTTP GET/POST过程,并在此期间可能还会涉及到多个Downloader Middleware参与进来共同协作; 5. 如果一切顺利的话,则返回含有有效载荷体(Response Body)在内的Response实体供下一步骤使用; 6. Spider再次出场接手这个新产生的Response参数作为入口函数parse()的一部分传入值来进行DOM树遍历查找匹配模式进而产出新的Requests或者Items记录; 7. 对于后者而言将会继续沿着Pipeline路径前进直到抵达终点站完成持久化入库作业;而对于前者则重复前面提到过的第2~6个环节形成闭环迭代机制不断推进整体进度向前发展。 8. 整个项目运行过程中还会有Extension定期汇报当前状态指标以便及时发现潜在风险因素做出相应对策反应。 ```python import scrapy class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['example.com'] start_urls = ['http://www.example.com'] def parse(self, response): self.log('Visited %s' % response.url) # Extract data using CSS or XPath selectors and yield items. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值