在前面编写爬虫的时候,如果我们使用 requests、aiohttp 等库,需要从头至尾把爬虫完整地实现一遍,比如说异常处理、爬取调度等,如果写的多了,的确会比较麻烦。

那么有没有什么办法可以提升我们编写爬虫的效率呢?当然是有的,那就是利用现有的爬虫框架。

说到 Python 的爬虫框架,Scrapy 当之无愧是最流行最强大的框架了。本节我们就来初步认识一下 Scrapy,后面的课时我们会对 Scrapy 的功能模块进行详细介绍。

Scrapy 介绍

Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。我们只需要定制开发几个模块就可以轻松实现一个爬虫。

首先我们来看下 Scrapy 框架的架构,如图所示:

它可以分为如下的几个部分。

  • Engine(引擎):用来处理整个系统的数据流处理、触发事务,是整个框架的核心。
  • Item(项目):定义了爬取结果的数据结构,爬取的数据会被赋值成该对象。
  • Scheduler(调度器):用来接受引擎发过来的请求并加入队列中,并在引擎再次请求的时候提供给引擎。
  • Downloader(下载器):用于下载网页内容,并将网页内容返回给蜘蛛。
  • Spiders(蜘蛛):其内定义了爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提取结果和新的请求。
  • Item Pipeline(项目管道):负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据。
  • Downloader Middlewares(下载器中间件):位于引擎和下载器之间的钩子框架,主要是处理引擎与下载器之间的请求及响应。
  • Spider Middlewares(蜘蛛中间件):位于引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛输入的响应和输出的结果及新的请求。

初看起来的确比较懵,不过不用担心,我们在后文会结合案例来对 Scrapy 的功能模块进行介绍,相信你会慢慢地理解各个模块的含义及功能。

数据流

了解了架构,下一步就是要了解它是怎样进行数据爬取和处理的,所以我们接下来需要了解 Scrapy 的数据流机制。

Scrapy 中的数据流由引擎控制,其过程如下:

  • Engine 首先打开一个网站,找到处理该网站的 Spider 并向该 Spider 请求第一个要爬取的 URL。
  • Engine 从 Spider 中获取到第一个要爬取的 URL 并通过 Scheduler 以 Request 的形式调度。
  • Engine 向 Scheduler 请求下一个要爬取的 URL。
  • Scheduler 返回下一个要爬取的 URL 给 Engine,Engine 将 URL 通过 Downloader Middlewares 转发给 Downloader 下载。
  • 一旦页面下载完毕, Downloader 生成一个该页面的 Response,并将其通过 Downloader Middlewares 发送给 Engine。
  • Engine 从下载器中接收到 Response 并通过 Spider Middlewares 发送给 Spider 处理。
  • Spider 处理 Response 并返回爬取到的 Item 及新的 Request 给 Engine。
  • Engine 将 Spider 返回的 Item 给 Item Pipeline,将新的 Request 给 Scheduler。
  • 重复第二步到最后一步,直到 Scheduler 中没有更多的 Request,Engine 关闭该网站,爬取结束。

通过多个组件的相互协作、不同组件完成工作的不同、组件对异步处理的支持,Scrapy 最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。

安装

了解了 Scrapy 的基本情况之后,下一步让我们来动手安装一下吧。

Scrapy 的安装方法当然首推官方文档,其地址为:https://docs.scrapy.org/en/latest/intro/install.html,另外也可以参考 https://cuiqingcai.com/5421.html。

安装完成之后,如果可以正常使用 scrapy 命令,那就是可以了。

项目结构

既然 Scrapy 是框架,那么 Scrapy 一定帮我们预先配置好了很多可用的组件和编写爬虫时所用的脚手架,也就是预生成一个项目框架,我们可以基于这个框架来快速编写爬虫。

Scrapy 框架是通过命令行来创建项目的,创建项目的命令如下:

scrapy startproject demo

执行完成之后,在当前运行目录下便会出现一个文件夹,叫作 demo,这就是一个 Scrapy 项目框架,我们可以基于这个项目框架来编写爬虫。

项目文件结构如下所示:

scrapy.cfg
project/__init__.pyitems.pypipelines.pysettings.pymiddlewares.pyspiders/__init__.pyspider1.pyspider2.py...

在此要将各个文件的功能描述如下:

  • scrapy.cfg:它是 Scrapy 项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。
  • items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里。
  • pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里。
  • settings.py:它定义项目的全局配置。
  • middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现。
  • spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。

好了,到现在为止我们就大体知道了 Scrapy 的基本架构并实操创建了一个 Scrapy 项目,后面我们会详细了解 Scrapy 的用法,感受它的强大,下节课见。

第41讲:Scrapy框架的介绍相关推荐

  1. 爬虫 第六讲 Scrapy框架

    文章目录 爬虫 第六讲 Scrapy框架 一.Scrapy框架 Scrapy简介 工作流程 Scrapy入门 pipline使用 1.scrapy.Request知识点 2.item的介绍和使用 3. ...

  2. 爬虫框架Scrapy框架的介绍 一看就明白

    Scrapy功能非常强大,爬取效率高,相关扩展组件多,可配置和可扩展晨读非常高,它几乎可以应对所有反爬网站,是目前Python中使用最广泛的爬虫框架.Scrapy是一个基于Twisted的异步处理框架 ...

  3. Scrapy框架的介绍和基本使用

    一 Scrapy框架的简介 为了爬取网站数据而编写的一款应用框架,所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板 该框架提供了高性能的异步下载,解析和持久化等功能 二 安装 linu ...

  4. python爬虫——scrapy框架(介绍)

    一.scrapy介绍 Scrapy是用纯Python实现的一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能快速的抓取. Scrapy使用了 Twisted[ˈtwɪ ...

  5. Python:Scrapy 框架简单介绍

    Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...

  6. python的scrapy框架的安装_Python爬虫基础(四)--Scrapy框架的安装及介绍

    Scrapy框架的介绍 安装: pip3 install Scrapy 安装测试: cmd命令行界面,输入:scrapy -h 框架安装完成: scrapy框架: 分为五个模块+两个中间件(5+2结构 ...

  7. python 爬虫 学习笔记(一)Scrapy框架入门

    沉迷于通过高效算法及经典数据结构来优化程序的时候并不理解,为什么多线程可以优化爬虫运行速度?原来是程序特性所决定的:传统算法的程序复杂度主要来源于计算,但网络程序的计算时间可以忽略不计,网络程序所面临 ...

  8. 《零基础入门学习Python》第063讲:论一只爬虫的自我修养11:Scrapy框架之初窥门径

    上一节课我们好不容易装好了 Scrapy,今天我们就来学习如何用好它,有些同学可能会有些疑惑,既然我们懂得了Python编写爬虫的技巧,那要这个所谓的爬虫框架又有什么用呢?其实啊,你懂得Python写 ...

  9. 13 Scrapy框架介绍

    # Author:Nimo_Ding''' 练习 - 当当图书榜单爬虫 前两关,我们学习了能提升爬虫速度的进阶知识--协程,并且通过项目实操,将协程运用于抓取薄荷网的食物数据. 可能你在体验开发一个爬 ...

最新文章

  1. 编写c语言程序 斐波那契,C语言程序实现斐波那契数列的解题思路???
  2. thinkphp3.2 学习
  3. Python学习之数组
  4. c语言编程课程心得,c语言编程课程设计心得.docx
  5. 在虚拟机中安装Windows Server 2008企业版
  6. LINUX中常用操作命令
  7. SQL2005转2000
  8. 大整数相加链表实现(Add Two Numbers)
  9. 天正多条线段长度lisp下载_预习丨人教版六年级数学(上册)全册知识要点梳理,可下载...
  10. 各种投影灯泡的清零方法!
  11. python信息安全书籍_2018年信息安全从业者书单推荐
  12. 最简单的非线性动力系统
  13. jmail的使用说明
  14. 如何调整基准电压提高ADC精度
  15. 品牌背后的逻辑到底是什么?
  16. 【源码】林业害虫检测小程序(可拓展美化)
  17. Opencv中,imag=cv2.cvtColor(imag,cv2.COLOR_BGR2GRAY) 报错:error:!_src.empty() in function ‘cv::cvtColor‘
  18. PostgreSQL 15 新特性解读 | 墨天轮优质文章合集
  19. 关于visual studio安装失败的真正解决办法
  20. 打鱼晒网问题(C++)

热门文章

  1. Hystrix Health Indicator及Metrics Stream支持
  2. Innodb存储引擎的特性(1).
  3. 整合Tomcat和Nginx实现动静态负载均衡
  4. from mysql_MySQL的FROM
  5. MySQL 下载与配置教程(免安装版)
  6. 分析工厂模式中的问题并改造
  7. POJ 3259 Wormholes【最短路/SPFA判断负环模板】
  8. 李洪强漫谈iOS开发[C语言-025]-赋值运算符案例
  9. python----面向对象:1类的定义
  10. Java内存管理文章合集