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

  • 相关阅读:
    Servlet 处理HTTP请求
    Servlet基础知识
    JavaWeb基础知识点①请求响应②comcat③类和类的关系
    MySQL子查询
    聚合与分组
    表联接
    LVS+KEEPALIVED
    tar命令详解
    mysql 安装
    mysql两种备份方法总结:mysqldump 和 xtrabackup
  • 原文地址:https://www.cnblogs.com/waterr/p/14331965.html
Copyright © 2011-2022 走看看