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 异常处理实例详解
Mar 12 Python
python中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
python解析xml文件操作实例
Oct 05 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
名片管理系统python版
Jan 11 Python
Python SQLite3简介
Feb 22 Python
Python docx库用法示例分析
Feb 16 Python
python 函数中的内置函数及用法详解
Jul 02 Python
Django中多种重定向方法使用详解
Jul 17 Python
基于Python执行dos命令并获取输出的结果
Dec 30 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
jupyter notebook 重装教程
Apr 16 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
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
python实现rest请求api示例
2014/04/22 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
python dlib人脸识别代码实例
2019/04/04 Python
PyQt5响应回车事件的方法
2019/06/25 Python
python sorted方法和列表使用解析
2019/11/18 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
python numpy库np.percentile用法说明
2020/06/08 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
优秀团支部事迹材料
2014/02/08 职场文书
小学生环保标语
2014/06/13 职场文书
成本会计实训报告
2014/11/05 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
物业保洁员管理制度
2015/08/05 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers