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读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
zookeeper python接口实例详解
Jan 18 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
Python子类继承父类构造函数详解
Feb 19 Python
Python3几个常见问题的处理方法
Feb 26 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 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中ini_set与ini_get用法实例
2014/11/04 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
讲解Python中的标识运算符
2015/05/14 Python
使用python实现个性化词云的方法
2017/06/16 Python
Python实现简单的语音识别系统
2017/12/13 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
武汉英思工程科技有限公司–ORACLE面试测试题目
2012/04/30 面试题
Java面向对象面试题
2016/12/26 面试题
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
医务人员自我评价
2014/01/26 职场文书
爱护公物主题班会
2015/08/17 职场文书
如何利用python实现Simhash算法
2022/06/28 Python