Scrapy框架使用的基本知识


Posted in Python onOctober 21, 2018

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python中使用PIPE操作Linux管道
Feb 04 Python
由Python运算π的值深入Python中科学计算的实现
Apr 17 Python
python调用OpenCV实现人脸识别功能
May 25 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
Python中断多重循环的思路总结
Oct 04 Python
Python socket模块方法实现详解
Nov 05 Python
使用Pytorch来拟合函数方式
Jan 14 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
利用python中集合的唯一性实现去重
Feb 11 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
详解pandas赋值失败问题解决
Nov 29 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
python去掉 unicode 字符串前面的u方法
Oct 21 #Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 #Python
python之消除前缀重命名的方法
Oct 21 #Python
使用Scrapy爬取动态数据
Oct 21 #Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 #Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 #Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 #Python
You might like
PHP自定义大小验证码的方法详解
2013/06/07 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
深入解析Python编程中JSON模块的使用
2015/10/15 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
python实现月食效果实例代码
2019/06/18 Python
python和JavaScript哪个容易上手
2020/06/23 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
怎样从/向数据文件读/写结构
2014/11/23 面试题
英文自荐信格式
2013/11/28 职场文书
公益活动策划方案
2014/01/09 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
上课看小说检讨书
2014/02/22 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
学校节能减排倡议书
2014/05/16 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
女生抽烟检讨书
2014/10/05 职场文书
公积金接收函格式
2015/01/30 职场文书