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实现PS图像明亮度调整效果示例
Jan 23 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
用pycharm开发django项目示例代码
Oct 24 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
python安装后的目录在哪里
Jun 21 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的源码中深入了解stdClass类
2014/04/18 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
React-router4路由监听的实现
2018/08/07 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
校园活动策划书范文
2014/01/10 职场文书
给学校建议书范文
2014/05/13 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
质检员岗位职责范本
2015/04/07 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
微信小程序基础教程之echart的使用
2021/06/01 Javascript
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers