Scrapy 框架介绍 [Scrapy 框架概述][Scrapy 框架的特点][Scrapy 框架的架构概述]
您的“关注”和“点赞”,是信任,是认可,是支持,是动力…
如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。
文章目录
- 1 Scrapy 框架概述
- 2 Scrapy 框架的特点
- 2.1 快速而强大
- 2.2 容易扩展
- 2.3 可移植(跨平台)
- 3 Scrapy 框架的架构概述
- Scrapy 体系结构(架构图)
- 对组件说明
- 对数据流说明
- 【友情链接】
- 微信公众号:码农阿杰
- 博客园
- 【参考资料】
- [Python 官网](https://www.python.org/)
- [Python 3.8.2 documentation](https://docs.python.org/release/3.8.2/)
- [Scrapy 官网](https://scrapy.org/)
- [Scrapy 2.2 documentation](https://docs.scrapy.org/en/latest/)
1 Scrapy 框架概述
Scrapy 是一个适用于 Python 的一个快速、高层次的、开放源代码的屏幕抓取和 web 抓取的应用程序框架,用于抓取 web 站点并从页面中提取结构化的数据,可用于各种有用的应用程序。
Scrapy 常应用在包括数据挖掘、监测、信息处理、存储历史数据(历史档案)或自动化测试等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。
Scrapy 最初是为屏幕抓取而设计的,但它也可以用来访问 API 或用作通用 Web 搜寻器来提取数据。
Scrapy 吸引人的地方在于它是一个框架,任何人都可以根据需求便捷的进行修改。它也提供了多种类型爬虫的基类,如 BaseSpider、sitemap 爬虫等。
2 Scrapy 框架的特点
2.1 快速而强大
编写规则以提取数据,然后让 Scrapy 完成其余工作。
它管理请求,解析 HTML 网页,收集数据并将其保存为所需的格式,不需要为每个其他步骤使用单独的库。
2.2 容易扩展
通过设计可扩展,无需接触核心即可轻松插入新功能。
可以在 Scrapy 中使用中间件。中间件是一种“插件”,可为 Scrapy 添加其他功能。我们可以将很多开源中间件附加到 Scrapy 以获得额外的功能。
2.3 可移植(跨平台)
用 Python 编写,可以在 Linux,Windows,Mac 和 BSD 上运行。
3 Scrapy 框架的架构概述
概述 Scrapy 体系结构(架构图)及其组件,及其系统内部发生的数据流(由红色箭头显示),还包括对这些组件的简要说明。
Scrapy 体系结构(架构图)
如下图所示(来自官方文档):
对组件说明
- Engine(引擎):Scrapy 引擎负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件。
- Scheduler(调度器):Scrapy 调度器调度程序接收来自引擎的 request(请求),并对它去重,放入到请求队列中;并在引擎请求它们时使它们排队,并根据队列的取出规则,把请求按顺序返回给引擎。
- Downloader(下载器):下载器负责获取网页数据并将其返回给引擎,引擎又将其传给 Spiders(爬虫)。
- Spiders(爬虫):爬虫(Spiders)用来解析 response,提取出 Items 和新的Requests。
- Item Pipeline(项目管道):一旦爬虫将这些项目提取(或刮取),则项目管道负责处理这些项目。典型的任务包括清理,验证和持久性(例如将项目存储在数据库中)。
- Downloader middlewares(下载器中间件):Downloader 中间件是位于引擎和Downloader 之间的特定挂钩,数据流在从引擎传递到 Downloader 时处理请求,以及从 Downloader 传递到 Engine 的响应处理。
如果需要执行以下操作之一,请使用 Downloader 中间件:
(1)在将请求发送到下载程序之前处理请求(即,在 Scrapy 将请求发送到网站之前);
(2)在传递给 Spiders 之前更改收到的响应;
(3)发送新的请求,而不是将收到的响应传递给 Spiders;
(4)将响应传递给 Spiders,而无需获取网页;
(5)默默地丢弃一些请求。 - Spider middlewares(爬虫中间件):爬虫中间件是位于引擎和爬虫之间的特定挂钩,并且能够处理爬虫的输入(响应)和输出(项目和请求)。
如果需要以下操作之一,请使用 Spider 中间件:
(1)Spiders 回调的后处理输出-更改/添加/删除请求或项目;
(2)后处理 start_requests;
(3)处理爬虫异常;
(4)根据响应内容,对某些请求调用 errback 而不是回调。
对数据流说明
首先,Scrapy 会实例化一个 Crawler 对象,在该对象中创建 Spider 对象、Engine 对象,通过 Engine 对象打开 Spider,并生成第一个 request(请求)。
- ①Scrapy Engine(Scrapy 引擎) 从 Spiders(爬虫)获取初始请求。
- ②Scrapy Engine(Scrapy 引擎)把请求给调度器,并询问下一次请求。
- ③Scrapy Scheduler(Scrapy 调度器)对 url 去重,放到队列中等待,并把下一个 request 返回给 Engine。
- ④Scrapy Engine(Scrapy 引擎)把从调度器返回的 reqest 经过下载中间件交给下载器。
- ⑤页面下载完成后, Downloader 会生成一个 Response(响应),并通过 Downloader Middlewares(下载器中间件)将其发送到 Engine。
- ⑥引擎接收来自下载器的响应,并通过爬虫中间件,将其发送到爬虫进行处理。
- ⑦爬虫接收到响应,解析处理响应,解析出 Items 和 新的 Request ,再通过爬虫中间件提交给 Engine。
- ⑧引擎把接收到的 Items 提交给 Item Pipeline,把接收到的 Request 提交给调度器。
- ⑨重复该过程(从步骤1开始),直到不再有 Scheduler 的请求为止 。
【友情链接】
微信公众号:码农阿杰
博客园
【参考资料】
Python 官网
Python 3.8.2 documentation
Scrapy 官网
Scrapy 2.2 documentation
Scrapy 框架介绍 [Scrapy 框架概述][Scrapy 框架的特点][Scrapy 框架的架构概述]相关推荐
- Django框架介绍及配置
Django框架介绍及配置 一, WEB框架介绍 1.1Web应用程序处理流程 1.2Web框架程序的意义 用于搭建Web应用程序 免去不同Web应用相同代码部分的重复 1.3 Web应用程序的本质 ...
- python爬虫scrapy框架教程_Python爬虫教程-30-Scrapy 爬虫框架介绍
从本篇开始学习 Scrapy 爬虫框架 Python爬虫教程-30-Scrapy 爬虫框架介绍 框架:框架就是对于相同的相似的部分,代码做到不出错,而我们就可以将注意力放到我们自己的部分了 常见爬虫框 ...
- 13 Scrapy框架介绍
# Author:Nimo_Ding''' 练习 - 当当图书榜单爬虫 前两关,我们学习了能提升爬虫速度的进阶知识--协程,并且通过项目实操,将协程运用于抓取薄荷网的食物数据. 可能你在体验开发一个爬 ...
- 1. Scrapy 框架介绍
1. Scrapy 框架介绍 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy = Scrach+Python S ...
- 数据分析利器Python——爬虫(含爬取过程、Scrapy框架介绍)
文章目录 一.基础知识 1.定义 2.基本架构 二.URL管理模块 三.网页下载模块 Python中的requests模块 四.网页解析模块 1.结构化网页解析 2.BeautifulSoup使用步骤 ...
- 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用
网络爬虫开发常用框架 Scrapy 爬虫框架 Crawley 爬虫框架 PySpider 爬虫框架 Scrapy 爬虫框架的使用 搭建 Scrapy 爬虫框架 1. 安装 Twisted 模块 2. ...
- Python爬虫之scrapy框架介绍
一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等) ...
- Python爬虫——scrapy框架介绍
一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等) ...
- python多线程框架_Python爬虫第七天:多线程爬虫|Scrapy框架
内容简述: 一:多线程爬虫 二:Scrapy框架 一:多线程爬虫原理 [示例见代码] 二:Scrapy框架 定义:Scrapy是基于Python实现,方便爬取网站数据.提取结构性数据的应用框架. 底层 ...
最新文章
- NoSQL有了Android版本
- spring boot打包文件后,报错\No such file or directory
- 返岗上班应该注意什么?五个细节必须牢记
- LiveVideoStackCon讲师热身分享 ( 十三 ) —— Intel QSV技术在FFmpeg中的实现与使用
- VSCode中怎么改变文件夹的图标
- 来了!云栖大会都能看到什么?
- 在delphi中嵌入腳本語言--(譯)RemObjects Pascal Script使用說明(1)(譯)
- uniapp对象怎么获取值_原理 | 怎么获取PMSM电机转子位置Offset值
- php 无法创建com组件,关于IIS php调用com组件的权限问题
- 为什么三表联查查出的数据每条出现好多次_独家解读!京东高可用分布式流数据存储的架构设计...
- 基于 Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis 的语音克隆复现论文阅读
- Elastic 7.12 版重磅发布:读时模式、冻结层技术预览版和自动扩展功能正式发布
- Linux SPI驱动框架(2)——控制器驱动层
- 计算机组成原理常见题(四)
- python conda无法安装包 报错An HTTP error occurred when trying to retrieve this URL.
- IIC、SPI和UART区别
- Zookeeper-3.4.5安装步骤及异常处理
- 经典网页设计:20个简约风格的电子商务网站
- 【风控模型方法论】利用系数符号、VIF和IV快速挑选模型变量
- 有交互项的多元线性回归