zoukankan      html  css  js  c++  java
  • scrapy 运行逻辑

    爬虫的步骤:发送请求获得响应→解析并提取数据→保存数据

    我们沿用这个朴素的逻辑去理解scrapy

    一、发送请求获得响应

    1、爬虫发送请求request到引擎

    2、引擎将请求request传递给调度器scheduler队列

    3、调度器scheduler从请求队列中向引擎输送request

    4、引擎将request 经过下载中间件Middleware传给下载器

    Middleware下载器中间件是引擎和下载器之间通信的中间件。在这个中间件中我们可以设置代理、更换请求头等来达到反反爬虫的目的。要写下载器中间件,可以在下载器中实现两个方法。一个是process_request(),这个方法在将request交给下载器之前执行,一个是process_response()是当下载器完成http请求,返回响应给引擎的时候调用

    process_request(self, request, spider) 必须返回以下之一:

    • 返回None:则继续执行其他下载中间件的process_request方法送往下载器,直到合适的下载器函数被调用,该request被执行,返回response
    • 返回Response:则终止当前流程,也终止继续调用其他process_request方法,将该response通过引擎返回给爬虫
    • 返回Request:则终止当前流程,也终止继续调用其他process_request方法,将request返回给调度器,大多数情况是更换新的request请求
    • IgnoreRequest:该异常就会交个process_exception方法进行处理; 如果没有任何一个方法处理该异常,那么该请求就直接被忽略不会记录错误日志

    5、下载器完成HTTP请求,返回响应给下载中间件Middleware,将response传递给引擎

    process_request(self, request, spider) 必须返回以下之一:

    • 返回response:则继续执行,其他下载中间件也会处理该response,直至交给引擎再交给爬虫
    • 返回request:则中间件终止,该request返回引擎再给调度器
    • 抛出 IgnoreRequest 异常:该请求就被忽略了且不做记录

    6、引擎将response传递给爬虫

    二、解析并提取数据

    7、爬虫解析Response,提取数据items或继续向解析出来的url发送请求给引擎

    三、保存数据

    8、引擎将items传递给Item Pipeline,将请求传递给Scheduler,继续进行之前的步骤。

  • 相关阅读:
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
    算法笔记-- 二进制集合枚举子集 && 求子集和 && 求父集和
    BZOJ 1084: [SCOI2005]最大子矩阵
    BZOJ 1968: [Ahoi2005]COMMON 约数研究
    2018 German Collegiate Programming Contest (GCPC 18)
    Codeforces 1100 F
    算法笔记--极大极小搜索及alpha-beta剪枝
    2017 Russian Code Cup (RCC 17), Elimination Round D
    All You Can Code 2008 (Romanian Contest) A
    2016 Russian Code Cup (RCC 16), Final Round B
  • 原文地址:https://www.cnblogs.com/waterr/p/14331965.html
Copyright © 2011-2022 走看看