zoukankan      html  css  js  c++  java
  • Scrapy 架构介绍

    Scrapy 架构

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

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

    • Engine引擎(大总管),用来处理整个系统的数据流处理,触发事务,是整个框架的核心。
    • Item,项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该对象。
    • Scheduler, 调度器,用来接受引擎发过来的请求并加入队列中,并在引擎再次请求的时候提供给引擎,可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
    • Downloader,下载器,用于下载网页内容,并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的
    • Spiders,蜘蛛,是开发人员自定义的类,里面有爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提取结果和新的请求。
    • Item Pipeline,项目管道,在items被提取后负责处理它们,它的主要任务是清洗、验证和存储数据。
    • Downloader Middlewares,下载器中间件,位于引擎和下载器之间的钩子框架,主要是处理引擎与下载器之间的请求及响应。(用的最多,加头,加代理,加cookie,集成selenium)
    • Spider Middlewares, 蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛输入的响应和输出的结果及新的请求。

    两个桥梁

     

    数据流

    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 最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。

  • 相关阅读:
    手机端阻止页面滑动-模板
    window.location各个属性-笔记
    面向对象的编程思想
    异步执行原理
    移动端rem布局实现(vw)
    用css3实现摩天轮旋转的动画效果
    js如何从一个数组中随机取出n个不同且不重复的值
    js数组中如何去除重复值?
    各大主流流浪器的内核是什么?
    javascript数组常用方法
  • 原文地址:https://www.cnblogs.com/baohanblog/p/12675490.html
Copyright © 2011-2022 走看看