强大的爬虫框架 Scrapy

举报
二哈侠 发表于 2022/10/14 21:48:04 2022/10/14
【摘要】 本节来介绍一个强大的爬虫框架 Scrapy。Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。1. Scrapy的架构Scrapy 的架构图如下所示:下面对上图中的各个组件做介绍:1. Engine:引擎负责控制数据流在系统所有组件中流动,并在相应动作发生时触发事件。2. Sch...

本节来介绍一个强大的爬虫框架 Scrapy。Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。

1. Scrapy的架构

Scrapy 的架构图如下所示:

下面对上图中的各个组件做介绍:

1. Engine:引擎负责控制数据流在系统所有组件中流动,并在相应动作发生时触发事件。
2. Scheduler:调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。
3. Downloader:下载器负责获取页面数据并提供给引擎,而后提供给spider。
4. Spiders:Spider 是 Scrapy 用户编写用于分析 response 并提取 item(即获取到的 item)或额外跟进的 URL 的类。 每个 spider 负责处理一个特定(或一些)网站。
5. Item Pipelines:Item Pipeline 负责处理被 spider 提取出来的 item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。
6. Downloader Middlewares:下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理 Downloader 传递给引擎的 response。 其提供了一个简便的机制,通过插入自定义代码来扩展 Scrapy 功能。
7. Spider Middlewares:Spider 中间件是在引擎及 Spider 之间的特定钩子(specific hook),处理 spider 的输入(response)和输出(items 及 requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展 Scrapy 功能。

2.组件间的数据流

上述各个组件间的数据流由执行引擎控制,其过程如下:


  1. 引擎从爬虫得到初始请求。

  2. 引擎在调度器中调度请求,并请求下一个要爬取的请求。

  3. 调度器返回引擎下一个要爬取的请求。

  4. 通过下载中间件,引擎将请求发送到下载器。

  5. 页面下载完毕之后,下载器生成一个该页面的响应,并通过下载中间件发送给引擎。

  6. 引擎收到来自下载器的响应,并通过爬虫中间件,将它发送到爬虫进行处理。

  7. 爬虫处理响应,而后通过爬虫中间件将抓取到的 items 和新的请求返回到引擎。

  8. 引擎将处理好的items发送到Item Pipelines,然后发送已处理的请求到调度器,并询问下个可能的请求。

  9. 这个过程重复进行(从1开始),直到调度器没有更多的请求。

3.项目创建

我们可以通过命令行来创建一个 Scrapy 项目,命令为scrapy startproject hello_scrapy ,其中 hello_scrapy 为项目名称。创建的 Scrapy 项目的文件结构如下所示:

各个文件的功能为:


  1. scrapy.cfg:它是 Scrapy 项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。

  2. items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里。

  3. middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现。

  4. pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里。

  5. settings.py:它定义项目的全局配置。

  6. spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。