Scrapy框架使用的基本知识

作者:回忆不说话 时间:2022-02-23 22:27:27 

scrapy是一个基于Twisted的异步处理框架,可扩展性很强。优点此处不再一一赘述。

下面介绍一些概念性知识,帮助大家理解scrapy。

一、数据流向

要想熟练掌握这个框架,一定要明白数据的流向是怎么一个过程。总结如下:

1.引擎先打开网站,请求url。

2.引擎通过调度器以Request形式调度url。

3.引擎请求下一个url。

4.调度器将url通过Downloader Middlewares发送给引擎

5.Downloader 生成response,通过Downloader Middlewares发送给引擎

6.引擎接收Response 通过spiderMiddleware发送给spider处理

7.spider处理response

8.引擎将spider处理的item给ItemPipeline 然后将新的Request给调度器。

二、各个结构的作用

DownloderMiddleware

调度器会从队列之中拿出Request发送给Downloader执行下载,这个过程会经过DownloaderMiddleware的处理。

作用的位置有两个:

  • 在调度器调出Request发送给Downloader之前。

  • 下载之后生成Response发送给spider之前。

核心方法有三个:

process_request(request,spider)

Request 到达Downloader之前,就会被调用

参数介绍:

  •          request :Request对象,被处理的Request。

  •          spider:spider对象,上面被处理的Request对应的spider。

返回值:

1.返回None 调用别的process_request()方法,直至将Request执行得到Response才会结束。

2.返回Response对象,低优先级的process_request()process_exception不调用。

3.返回request对象,低优先级的process_request()停止执行,返回新的Request

process_response(request,response,spider)

作用位置:

  • Downloader 执行Request之后,会得到对应的Reponse ,scrapy 引擎会将Response发送给spider进行解析,发送之前调用这个方法对Response进行处理。

返回值的情况:

1.返回Request低优先级的process_respons()不调用。

2.返回response低优先级的process_respons()继续调用。

process_exception(request,exception,spider)

此函数主要是用来处理异常的。

spiderMiddleware

作用位置:

  • Downloader生成Response之后会发送给spider,

  • 在发送之前,会经过spiderMiddleware处理。

核心方法:

process_soider_input(response,spider)

返回值:

1.返回None

 继续处理Response,调用所有的spiderMiddleware,知道spider处理

2.跑出异常

直接调用Request的errback()方法,使用process_spider_output()处理。

process_spider_output(response,result,spider)

当spider处理Response返回结果时,被调用。

process_spider_exception(response,exception,spider)

返回值:none

继续处理response,返回一个可迭代对象,process_spider_output()方法被调用。

process_start_request(start_requests,spider)

spider启动的Request为参数被调用,必须返回request

来源:https://blog.csdn.net/qq_39138295/article/details/82155625

标签:scrapy,框架
0
投稿

猜你喜欢

  • 基于python3 OpenCV3实现静态图片人脸识别

    2022-10-04 20:59:30
  • Selenium 模拟浏览器动态加载页面的实现方法

    2023-06-04 11:06:54
  • SQL Join的一些总结(实例)

    2024-01-14 04:28:16
  • python构造函数init实例方法解析

    2022-09-30 15:09:19
  • sql 语句插入结果为select和值混合示例

    2024-01-29 09:12:42
  • 【JavaScript实用系列】-- 胖页面载入效果

    2009-10-19 22:48:00
  • 移动端点击图片放大特效PhotoSwipe.js插件实现

    2024-04-28 10:21:02
  • Mootools 1.2教程(1)——MooTools介绍

    2008-11-12 13:01:00
  • ORACLE常见错误代码的分析与解决(一)

    2010-08-02 13:20:00
  • 关于python中readlines函数的参数hint的相关知识总结

    2023-12-31 02:37:12
  • python实现可变变量名方法详解

    2021-04-23 11:42:49
  • python 读取修改pcap包的例子

    2023-11-29 23:56:48
  • 页面上存在多个FckEditor编辑器的验证方法

    2022-07-29 07:00:49
  • Python如何批量获取文件夹的大小并保存

    2023-10-10 19:49:37
  • MySQL 创建主键,外键和复合主键的语句

    2024-01-20 05:40:51
  • jquery 将disabled的元素置为enabled的三种方法

    2024-04-19 10:19:14
  • 浅谈tensorflow中张量的提取值和赋值

    2022-06-23 19:20:55
  • 安装了Office2003补丁之后,access不能用,打不开了

    2011-05-12 12:19:00
  • Linux下python制作名片示例

    2022-06-07 00:29:33
  • Python机器学习之基础概述

    2021-07-18 19:07:59
  • asp之家 网络编程 m.aspxhome.com