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
猜你喜欢
- 前言我们在开发后台项目常常会遇到一个情况,功能模块列表数据导出Excel功能,但列表中某个字段无法通过Sql联表查询,且一次性查询再匹对也不
- 开始这是去年的问题了,今天在整理邮件的时候才发现这个问题,感觉顶有意思的,特记录下来。在表RelationGraph中,有三个字段(ID,N
- concat 与其说是连接,更准确的说是拼接。就是把两个表直接合在一起。于是有一个突出的问题,是横向拼接还是纵向拼接,所以concat 函数
- 之前一直正常的项目,莫名其妙的 database/sql 包下的方法、结构体等等IDE都无法识别,出现一堆Unresolved refere
- SQL SERVER 2000用sql语句如何获得当前系统时间就是用GETDATE();Sql中的getDate()Sql Server 中
- CSV 是一种简单的数据格式,通常为电子表格软件所使用。 它主要是由一系列的表格行组成,每行中单元格之间使用逗号(CSV 是 逗号分隔数值(
- 画布可以做很多事情,比如可以绘图,也可以做海报。在这里只是想拿它来的实现亲笔签名,开启不一样的亲笔签名姿势。开发框架:uniapp开发语言:
- 本文实例讲述了php函数serialize()与unserialize()用法。分享给大家供大家参考。具体方法如下:该实例主要讲述了php函
- 实际工作经历中,免不了有时候需要连接数据库进行问题排查分析的场景,之前一直习惯通过 mysql -uxxx -hxxxx -P1234 ..
- 以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。bit
- 如下所示:import serialimport timet = serial.Serial('com6', 115200)
- 用opencv处理一下pillow也可以,但是试过有时候会把图片自动旋转180°,cv没有这个问题import osfrom
- 检测剪刀石头布三种手势,通过摄像头输入,方法如下:选用合适颜色空间及阈值提取皮肤部分使用滤波腐蚀膨胀等方法去噪边缘检测寻用合适方法分类Ope
- 前言一周没有更新博客了,这一周的时间内加强了对机器学习和图像处理的学习。学的有点混乱,有必要记录一下。深度学习可以解决很多问题,但有时候深度
- 以网页表格为例:https://www.kuaidaili.com/free/该网站数据存在table标签,直接用requests,需要结合
- 更新:优化了代码,理由numpy的ufunc函数功能替换了之前的双重for循环,测试图片大小为692*1024*3,优化前运行时间为6.9s
- 本文实例讲述了Python多线程操作之互斥锁、递归锁、信号量、事件。分享给大家供大家参考,具体如下:互斥锁:为什么要有互斥锁:由于多线程是并
- 如果你已经理解了block formatting contexts那么请继续,否则请先看看这篇文章。Overflow能够做一些很牛掰的事情,
- 每次调用内部的方法时,方法前面加 self.举例:例子参考百度知道里面的回答class MyClass: def __init_
- 在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以