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的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
Python制作刷网页流量工具
Apr 23 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
Python线程下使用锁的技巧分享
Sep 13 Python
详解Python sys.argv使用方法
May 10 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
matplotlib部件之套索Lasso的使用
Feb 24 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
PHP5/ZendEngine2的改进
2006/10/09 PHP
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
PHP 图片文件上传实现代码
2010/12/29 PHP
PHP性能优化 产生高度优化代码
2011/07/22 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
jquery 新浪网易的评论块制作
2010/07/01 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
JavaScript中this详解
2015/09/01 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
详解python中list的使用
2019/03/15 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
C#如何进行LDAP用户校验
2012/11/21 面试题
珍珠奶茶店创业计划书
2014/01/11 职场文书
从事会计工作年限证明
2015/06/23 职场文书
七年级作文之冬景
2019/11/07 职场文书
JS ES6异步解决方案
2021/04/29 Javascript