首页 > 其他分享 >强大的爬虫框架 Scrapy

强大的爬虫框架 Scrapy

时间:2022-10-14 22:07:53浏览次数:56  
标签:请求 框架 爬虫 Spider Item Scrapy 引擎

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

1. Scrapy的架构

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 项目的文件结构如下所示:

强大的爬虫框架 Scrapy_ide_02

各个文件的功能为:

  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 都有一个文件。

标签:请求,框架,爬虫,Spider,Item,Scrapy,引擎
From: https://blog.51cto.com/u_15641375/5757985

相关文章

  • Flask框架
    Flask框架学习01-Flask:初识02-Flask:基础03-Flask:蓝图04-Flask:local05-Flask:高级06-Flask:SQLAlchemy Flask源码解析01-Flask源码解析:简介02-Flask源码解析:应用启......
  • 爬虫的基本原理
    一、爬虫的基本原理网络爬虫的价值其实就是数据的价值,在互联网社会中,数据是无价之宝,一切皆为数据,谁拥有了大量有用的数据,谁就拥有了决策的主动权。爬虫聚合站点https://......
  • 一个优雅的异步爬虫基类
    这是我编写的一个异爬虫基类,有以下几点优点使用接口继承的思想继承Crawler类后,必须实现parse和handle方法,否则程序报错,虽然Python没有接口的特性,但是使用raise方法抛出......
  • APICloud AVM框架 封装虚拟数字键盘组件
    AVM(Application-View-Model)前端组件化开发模式基于标准WebComponents组件化思想,提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具,完全兼容WebComponents标......
  • PyCharm 2022.2 发布了,支持最新 Python 3.11 和 PyScript 框架!
    翻译:Python猫原文:​​https://blog.jetbrains.com/pycharm/2022/07/2022-2​​通常而言,使用新潮的或者快速发展的技术,可能会挺有挑战性,你可能得经常阅读文档,才能熟悉新的语......
  • Python爬虫之requests模块了解
    requests模块知识点:掌握headers参数的使用掌握发送带参数的请求掌握headers中携带cookie掌握cookies参数的使用掌握cookieJar的转换方法掌握超时参数timeout的使用掌......
  • Python爬虫之mongodb介绍和安装
    Mongodb的介绍和安装学习目标了解非关系型数据库的优势了解mongodb的安装1.mongodb的介绍1.1什么是mongodbmongodb是一个功能最丰富的NoSQL非关系数据库。由C++语言......
  • Python爬虫之scrapy_splash组件的使用
    scrapy_splash组件的使用学习目标了解scrapy_splash组件的作用了解scrapy_splash组件的使用1.什么是scrapy_splash?scrapy_splash是scrapy的一个组件scrapy-splash加载js......
  • Python爬虫之http协议复习
    http协议复习知识点掌握http以及https的概念和默认端口掌握爬虫关注的请求头和响应头了解常见的响应状态码理解浏览器和爬虫爬取的区别一提起http协议,大家都会想起它是......
  • APICloud AVM 框架 封装树形分类选择组件 组件递归调用
    由于项目中,需要用到追加表单项目的功能,而表单项目在PC端是树形列表的形式展现,而且要实现多选功能,依上述需求开发了树形分类选择组件。组件开发中用到的知识要点是:组件递归......