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中的描述符(descriptor)
Jun 03 Python
Python3.6简单反射操作示例
Jun 14 Python
Python 获取 datax 执行结果保存到数据库的方法
Jul 11 Python
python3获取当前目录的实现方法
Jul 29 Python
python 解决cv2绘制中文乱码问题
Dec 23 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
PyInstaller运行原理及常用操作详解
Jun 13 Python
浅谈Django前端后端值传递问题
Jul 15 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
python脚本定时发送邮件
Dec 22 Python
如何编写python的daemon程序
Jan 07 Python
Python实现微信表情包炸群功能
Jan 28 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和ACCESS写聊天室(四)
2006/10/09 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
学校社会实践活动总结
2014/07/03 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
领导班子对照检查材料
2014/09/22 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
担保贷款承诺书
2015/04/30 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript