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求斐波那契数列示例分享
Feb 14 Python
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
Python爬虫工程师面试问题总结
Mar 22 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
python获取本机所有IP地址的方法
Dec 26 Python
解决python Markdown模块乱码的问题
Feb 14 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
python实现tail -f 功能
Jan 17 Python
python中wx模块的具体使用方法
May 15 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
python中append函数用法讲解
Dec 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
在Python中使用HTML模版的教程
2015/04/29 Python
使用python实现BLAST
2018/02/12 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
企业安全标语
2014/06/07 职场文书
爱牙日活动总结
2014/08/29 职场文书
2014年少先队工作总结
2014/12/03 职场文书
信用卡工作证明范本
2015/06/19 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers
python 学习GCN图卷积神经网络
2022/05/11 Python