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中使用strip()方法删除字符串中空格的教程
May 20 Python
python实现将html表格转换成CSV文件的方法
Jun 28 Python
Python Socket传输文件示例
Jan 16 Python
Python自动生产表情包
Mar 17 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
python 实现GUI(图形用户界面)编程详解
Jul 17 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 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
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
Form表单上传文件(type="file")的使用
2017/08/03 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
python从子线程中获得返回值的方法
2019/01/30 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
美国手机支架公司:PopSockets
2019/11/27 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
乔迁宴答谢词
2014/01/21 职场文书
环保建议书100字
2014/05/14 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL