首页 存档 技术 查看内容

.NET跨平台爬虫框架:DotnetSpider(1)初衷与架构设计

2018-3-30 13:00 |来自: 互联网 2194 0

摘要: (点击上方蓝字,可快速关注我们) 来源:ModestMT.Zou cnblogs.com/modestmt/p/5480773.html 为什么要造轮子 同学们可以去各大招聘网站查看一下爬虫工程师的要求,大多是招JAVA、PYTHON,甚至于还有NODEJS,C ; ...

(点击上方蓝字,可快速关注我们)


来源:ModestMT.Zou

cnblogs.com/modestmt/p/5480773.html


为什么要造轮子


同学们可以去各大招聘网站查看一下爬虫工程师的要求,大多是招JAVA、PYTHON,甚至于还有NODEJS,C ;再或者去开源中国查询C#的爬虫项目,仅有几个非常简单或是几年没有更新的项目。


而单纯性能上.NET对比JAVA,PYTHON并没有处于弱势,反而有开发上的优势(得益于世界上最强大的IDE)。爬虫性能瓶颈大多是在并发下载(网速)、IP池,那么为什么.NET没有一个强大的爬虫框架呢?说真的我不知道,可能爬虫框架核心上比较简单,也可能.NET的开发人员没有别的语言的开发人员勤奋,或是.NET的开源氛围没有别的语言高。


直到.NET要出开源版的消息传来,我觉得是时候开发一个跨平台,跨语言的爬虫框架了。但一开始是比较忐忑的,觉得自己水平不够去完全重新设计一个新的框架出来,因此参考了JAVA的一个轻量级爬虫框架webmagic,并加入了我自己的理解和改进。如果设计或写得不好请大家指正海涵


框架设计


由于我是参考的webmagic,所以整体架构上没有什么大的变化,设计图如下(图片是直接从webmagic上拿的)



  • Scheduler:负责URL的调度、去重,可以实现如Queue, PriorityQueueScheduler, RedisScheduler(可用于分布式)等等


  • **: 负责下载HTML,可以实现如Http**, 浏览器的**(WebDriver), Fiddler**,本地文件**等等


  • PageProcesser: 负责HTML解析、目标URL的选择


  • Pipeline: 负责数据的存储, 已实现文件存储, MySql存储, MySqlFile存储(脚本),MSSQL存储,MongoDb存储, 更多存储期待您的贡献


优点


  • 数据对象是通过Json结构来解析的:可以实现类中属性是类的情况(较少此种情况, 而且数据Pipeline仅限MongoDB时才能存储此种类型数据)


  • 支持Json文件定义爬虫:最终实现跨语言调用


  • 自动创建数据库、数据表


  • 支持 .NET CORE,可以跨平台


  • 支持ADSL拨号换IP:如果所有爬虫统一部署, 可以实现单台机器同时运行多个任务拨号互不影响、或者一个路由下面多个电脑下多个任务拨号互不影响


  • 支持自定义代理池


基本使用


基本使用只需要引用DotnetSpider2.Core(Nuget中获取)


DotnetSpider实现一个完整爬虫是需要4个模块的:Scheduler、**、PageProcessor、Pipeline。由于**和Scheduler都是有基本实现的,因此只需要实现PageProcessor和Pipeline就可以实现一个基本爬虫了,这种方式也是最自由的方式。


完全自定义的例子如下:


public static void Main(string[] args)

{

// Custmize processor and pipeline 完全自定义页面解析和数据管道

BaseUsage.CustmizeProcessorAndPipeline();

Console.WriteLine("Press any key to continue...");

Console.Read();

}


public static void CustmizeProcessorAndPipeline()

{

// Config encoding, header, cookie, proxy etc... 定义采集的 Site 对象, 设置 Header、Cookie、代理等

var site = new Site { EncodingName = "UTF-8", RemoveOutboundLinks = true };

for (int i = 1; i

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部