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 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
Python中使用装饰器时需要注意的一些问题
May 11 Python
python列表的常用操作方法小结
May 21 Python
Python AES加密实例解析
Jan 18 Python
python中使用PIL制作并验证图片验证码
Mar 15 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
分享vim python缩进等一些配置
Jul 02 Python
Python实现的KMeans聚类算法实例分析
Dec 29 Python
解决pycharm同一目录下无法import其他文件
Feb 12 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
python之pygame模块实现飞机大战完整代码
Nov 29 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 Http_Template_IT类库进行模板替换
2009/03/19 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
js的闭包的一个示例说明
2008/11/18 Javascript
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
热能动力工程毕业生自荐信
2013/11/07 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
跑操口号
2014/06/12 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
Python使用Kubernetes API访问集群
2021/05/30 Python