首页 > 其他 > 详细

案例分析:设计模式与代码的结构特性

时间:2019-12-06 23:34:44      阅读:103      评论:0      收藏:0      [点我收藏+]
Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛,它的设计模式是Template Method Pattern。这是一个爬虫框架,所以它需要请求网页模块,下载网页模块,处理网页信息模块,对所需要的信息进行存储的模块。对于一个爬虫工程师来说,需要爬取的不只是一个网站,在对多个网站进行爬取,为了简化编写爬虫的过程,对上面几个模块来说,是爬虫所共有的流程,因此可以把他们固定下来。框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。

 

Scrapy结构如下:

技术分享图片

 

 

具体要写一个爬虫,只需要在spiders文件夹中新建一个.py文件,里面继承一个爬虫基类,重写方法,即可得到一个新的爬虫。

技术分享图片

底下这个类是爬虫的基类,每个具体的爬虫都是继承的这个类,一般重写strat_requests方法来生成一个新的爬虫。

技术分享图片

 

如下图是各个模块之间的关系:

技术分享图片

 

  • crapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

  • Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

  • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

  • Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

  • Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

  • Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

  • Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

 

总结:

  Template Method Pattern的存在使得代码便于维护和扩展。它将实例共有的,逻辑相同的方法抽离出来,作为Template Method,而不同的实例只用实现不同的部分,让我们省去很多重复劳动。

 

这是我github上的一个项目:

https://github.com/chouhui/chou_crawl/tree/master/fish

 

 

案例分析:设计模式与代码的结构特性

原文:https://www.cnblogs.com/cyh2czj/p/11999171.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!