Python网络爬虫04---Scrapy工作原理

2022-03-02 22:23:57 浏览数 (1)

Python在网络爬虫中还有个很知名的库,叫做Scrapy.继续学习!

本小结,我们先来了解一下Scrapy的工作原理。

为什么要用Scrapy?

自己手写爬虫需要考虑很多的技术细节,比如下载器,解析器等;且容易出问题。

scrapy能帮助我们非常容易地创建一个大的爬虫项目

scrapy内置非常好用的selectors用来抽取数据(extract data) — xpath,css

scrapy速度快 (使用了异步请求技术)----scrapy采用twisted网络库

scrapy提供了自适应限制速度和反爬策略

scrapy通过配置文件,非常容易地控制爬虫

1 定义

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构

化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy是一个为遍历爬行网站、分解获取数据而设计的应用程序框架,它可以应用在广泛领域:数据挖掘、信

息处理和或者历史片(历史记录)打包等等

官方网站:http://scrapy.org

2 安装

scrapy框架的安装依赖于异步网络库twisted,安装过程很简单。

进入到python虚拟环境下:

pip install Scrapy

3 Scrapy工作原理

Scrapy框架主要由六大组件组成,它们分别是调试器(Scheduler)、下载器(Downloader)、爬虫(Spider)、

中间件(Middleware)、实体管道(Item Pipeline)和Scrapy引擎(Scrapy Engine)

3.1 Scrapy组件图

下面的图表显示了Scrapy架构组件:

组件说明:

(1)Scrapy Engine

引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。

(2)调度器(Scheduler)

调度器从引擎接受request对象,并将他们入队列,以便之后引擎请求他们时提供给引擎。

(3)下载器(Downloader)

下载器负责获取页面数据并提供给引擎,而后提供给spiders。

(4)Spiders

Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责

处理一个特定(或一些)网站。 更多内容请看 Spiders 。

(5)Item Pipeline

Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。 更多

内容查看 Item Pipeline。

(6)下载器中间件(Downloader middlewares)

下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response(也包括

引擎传递给下载器的Request)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看

下载器中间件(Downloader Middleware) 。

一句话总结就是:处理下载请求部分

(7)Spider中间件(Spider middlewares)

Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及

requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。

3.2. scrapy数据流图

数据流程图如下:

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

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

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

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

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

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

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

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

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

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

以上是Scrapy的工作原理,下一节我们上代码实战。敬请期待...

0 人点赞