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中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
Python字符串中查找子串小技巧
Apr 10 Python
详细讲解Python中的文件I/O操作
May 24 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
python模糊图片过滤的方法
Dec 14 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
Python底层封装实现方法详解
Jan 22 Python
Python PIL库图片灰化处理
Apr 07 Python
如何提高python 中for循环的效率
Apr 15 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 Python
高考考python编程是真的吗
Jul 20 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
Django入门使用示例
2017/12/12 Python
Python反射的用法实例分析
2018/02/11 Python
模具专业毕业生自荐书范文
2014/02/19 职场文书
环保建议书作文
2014/03/12 职场文书
学历公证书范本
2014/04/09 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
项目合作协议书范本
2014/04/16 职场文书
市场部经理岗位职责
2015/02/02 职场文书
导游词之河北野三坡
2019/12/11 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python