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,继续进行之前的步骤。

  • 相关阅读:
    office excel无法打开超链接解决方法
    mysql默认的数据库介绍(还没看,找时间研究)
    mysql目录结构及配置文件
    springboot-actuator应用后台监控
    服务器端负载均衡和客户端负载均衡的区别
    Spring Cloud Eureka 自我保护机制
    HDU 4028 The time of a day (dp+离散化)
    HDU 3652 B-number(数位DP)
    HDU 2966 In case of failure
    HDU 3622 Bomb Game
  • 原文地址:https://www.cnblogs.com/waterr/p/14331965.html
Copyright © 2011-2022 走看看