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的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
解决Python传递中文参数的问题
Aug 04 Python
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
python2与python3共存问题的解决方法
Sep 18 Python
python之消除前缀重命名的方法
Oct 21 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
通过Python实现一个简单的html页面
May 16 Python
python 读txt文件,按‘,’分割每行数据操作
Jul 05 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 大数据量及海量数据处理算法总结
2011/05/07 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python基础教程之元组操作使用详解
2014/03/25 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python实现报表自动化详解
2017/11/16 Python
python实现类之间的方法互相调用
2018/04/29 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
Python加速程序运行的方法
2020/07/29 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
社区八一活动方案
2014/02/03 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
党员干部学习心得体会
2016/01/23 职场文书
初中美术教学反思
2016/02/17 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
nginx中proxy_pass各种用法详解
2021/11/07 Servers