推荐一个。NetCore开发的蜘蛛爬虫开源项目
我是编程乐趣,一个10年。Net开发经验老程序员,点击右上方关注,每天为你分享开源项目和编程知识。
如果我们需要抓取网络上的数据,这时候我们就要写爬虫,这里面就涉及到网页的抓取、以及网页分析与数据提取、抓取的性能等知识,今天就给大家推荐一个开源项目,它可以很好解决你的问题,让你更专注业务的开发。
项目简介
这是一个基于。NetCore开发的、Web爬虫开源项目,一个轻量级、高性能、简便的框架;框架集成了爬取、数据分析提取、代理等功能,可以帮助我们快速的完成爬取的功能。
技术架构
1、跨平台:基于。NetCore开发,支持Windows、Mono、Liunx、WindowsAzure、Docker。
2、支持。NetCore2。2。
3、数据库:MySql。
4、组件:RabbitMQ。
框架功能
1、基础功能:网页Http数据爬取、解析网页数据(text、json、html)、存储解析的数据至数据库。
2、采集调度:采集的去重,以及采集顺序的控制,支持广度优先与深度优先的模式。
3、分部署部署:可以同时部署多个下载服务器;
4、下载代理器注册服务:负责下载代理器的注册、心跳;单机模式默认启动一个内置的注册服务;
5、统计:统计各个爬虫、服务中心的状态,比如爬虫的请求数量、成功数量、失败数量等;
6、请求配置:比如添加签名配置;
7、数据流:可以支持多个规则解析器,按照顺序解析;
8、并发:支持消息队列,预先缓存请求数据,提高采集性能。
项目结构
使用例子
简单爬虫例子publicclassTestSpider:Spider{publicstaticreadonlyHashSetstringCompletedUrlsnew();配置:速度、间隔时间publicstaticasyncTaskRunAsync(){varbuilderBuilder。CreateDefaultBuilderTestSpider(x{x。Speed1;x。EmptySleepTime5;});builder。UseDownloaderHttpClientDownloader();builder。UseQueueDistinctBfsSchedulerHashSetDuplicateRemover();awaitbuilder。Build()。RunAsync();}classMyDataParser:DataParser{protectedoverrideTaskParseAsync(DataFlowContextcontext){varrequestcontext。Request;lock(CompletedUrls){过滤varurlrequest。RequestUri。ToString();CompletedUrls。Add(url);if(urlhttp:axx。com){context。AddFollowRequests(new〔〕{newUri(http:bxx。com)});}}returnTask。CompletedTask;}publicoverrideTaskInitializeAsync(){returnTask。CompletedTask;}}publicTestSpider(IOptionsSpiderOptionsoptions,DependenceServicesservices,ILoggerSpiderlogger):base(options,services,logger){}protectedoverrideasyncTaskInitializeAsync(CancellationTokenstoppingTokendefault){awaitAddRequestsAsync(newRequest(http:axx。com));AddDataFlow(newMyDataParser());}}
Html数据解析publicasyncTaskXpathFollow(){varrequestnewRequest(http:xxx。com);vardataContextnewDataFlowContext(null,newSpiderOptions(),request,newResponse{ContentnewByteArrayContent(File。ReadAllBytes(cnblogs。html))});vardataParsernewTestDataParser();dataParser。AddFollowRequestQuerier(Selectors。XPath(。p〔classpager〕));awaitdataParser。HandleAsync(dataContext);varrequestsdataContext。FollowRequests;Assert。Equal(12,requests。Count);Assert。Contains(requests,rr。RequestUri。ToString()http:cnblogs。comsitehomep2);}
配置解析privateclassN:EntityBaseN{〔ValueSelector(Expression。p〔classtitle〕)〕publicstringtitle{get;set;}〔ValueSelector(Expression。p〔classdotnetspider〕)〕publicstringdotnetspider{get;set;}}
项目地址
https:github。comdotnetcoreDotnetSpider我是编程乐趣,一个10年。Net开发经验老程序员,专注开源项目和编程知识分享。
私信回复:【888】,领取。Net视频教程。
End
推荐阅读
推荐一个。NerCore开发的配置中心开源项目
阅读开源项目源代码的方法与心得
推荐一个Dapper扩展CRUD基本操作的开源库
一个基于C开发的Socket扩展库
一个可视化动画算法网站,值得收藏!