• (转)scrapy架构图与执行流程


    原文:https://www.cnblogs.com/miaoning/p/11626563.html

    概览

    本文描述了Scrapy的架构图、数据流动、以及个组件的相互作用

    架构图与数据流

    上图中各个数字与箭头代表数据的流动方向和流动顺序,具体执行流程如下:

      0. Scrapy将会实例化一个Crawler对象,在Crawler中:

        创建spider对象----_create_spider

        创建engine对象----_create_engine

        通过engine对象打开spider并生成第一个request---- yield self.engine.open_spider(self.spider, start_requests) 

          实例化调度器对象----Scheduler

        启动引擎---- yield defer.maybeDeferred(self.engine.start) 

      1. 引擎从Spider获取初始请求

        ----_next_request

        ----_next_request_from_scheduler

      2. 引擎把初始请求给调度器,并向调度器询问下一次请求

        ----scheduler.next_request

      3. 调度器会对url进行指纹去重,如果是未爬取过的url,就把它放到队列中等待,并把下一个request返回给引擎

        把url放入到队列中----enqueue_request

        返回下一个request----next_request

      4. 引擎把从调度器返回的request途径下载中间件交给下载器

        ----download

      5. 一旦页面完成下载,下载器将会生成一个响应,途径下载中间件,再把它交给引擎

        ----download

      6. 引擎接收到响应,并把它途径爬虫中间件,再交给spider

        ----_handle_downloader_output

      7. spdier接收到响应,并对它进行解析,解析出Items或者新的Request,再把它们途径爬虫中间件,提交给引擎

        ----parse

      8. 引擎把接收到的items提交给Item Pipeline,把接收到的Request提交给调度器

      9. 从步骤1开始重复该过程,直到不在有request

    各组件介绍

    ENGINE

    引擎(engine)控制所有部件间的数据流,并在某些事件发生时触发事件

    Scheduler

    调度器(scheduler)接收来自引擎的request,并对它去重,放入到请队列中;并根据队列的取出规则,把请求按顺序返回给引擎

    Downloader

    下载器(Downloader)获取网页数据并返回给引擎

    Spiders

    爬虫(Spiders)用来解析response,提取出Items和新的Requests

    Item Pipeline

    对Items进行进一步的清洗,并持久化

    Downloader middlewares

    下载中间件可以勾住下载器和引擎之间的数据流,并对它们做一些处理,比如:

    • 在request送到下载器之前对它做一些处理,可以添加User_Agent,修改IP等
    • 对response做一些处理

    Spider middlewares

    爬虫中间件可以勾住爬虫和引擎之间的数据流,并对它们做一些处理

    技术链接
  • 相关阅读:
    矩阵快速幂 ZOJ 3497 Mistwald
    线段树(多棵) HDOJ 4288 Coder
    线段树(区间操作) POJ 3325 Help with Intervals
    BestCoder Round #75
    BestCoder Round #74 (div.2)
    DP ZOJ 2745 01-K Code
    Java IO file文件的写入和读取及下载
    Java时间和时间戳的相互转换
    Base64编码密钥时关于换行的几个问题。
    解决IllegalBlockSizeException:last block incomplete in decryption异常
  • 原文地址:https://www.cnblogs.com/liujiacai/p/15313311.html
Copyright © 2020-2023  润新知