推荐一个.Net Core开发的蜘蛛爬虫开源项目
如果我们需要抓取网络上的数据,这时候我们就要写爬虫,这里面就涉及到网页的抓取、以及网页分析与数据提取、抓取的性能等知识,今天就给大家推荐一个开源项目,它可以很好解决你的问题,让你更专注业务的开发。
项目简介
这是一个基于.Net Core开发的、Web爬虫开源项目,一个轻量级、高性能、简便的框架;框架集成了爬取、数据分析提取、代理等功能,可以帮助我们快速的完成爬取的功能。
技术架构
1、跨平台:基于.NetCore开发,支持Windows、Mono、Liunx、Windows Azure、Docker。
2、支持 .NetCore 2.2+。
3、数据库:MySql。
4、组件:RabbitMQ。
框架功能
1、基础功能:网页Http数据爬取、解析网页数据(text、json、html)、存储解析的数据至数据库。
2、采集调度:采集的去重,以及采集顺序的控制,支持广度优先与深度优先的模式。
3、分部署部署:可以同时部署多个下载服务器;
4、下载代理器注册服务:负责下载代理器的注册、心跳;单机模式默认启动一个内置的注册服务;
5、统计:统计各个爬虫、服务中心的状态,比如爬虫的请求数量、成功数量、失败数量等;
6、请求配置:比如添加签名配置;
7、数据流:可以支持多个规则解析器,按照顺序解析;
8、并发:支持消息队列,预先缓存请求数据,提高采集性能。
项目结构

使用例子
简单爬虫例子
public class TestSpider : Spider
{public static readonly HashSet CompletedUrls = new();//配置:速度、间隔时间public static async Task RunAsync(){var builder = Builder.CreateDefaultBuilder(x =>{x.Speed = 1;x.EmptySleepTime = 5;});builder.UseDownloader();builder.UseQueueDistinctBfsScheduler();await builder.Build().RunAsync();}class MyDataParser : DataParser{protected override Task ParseAsync(DataFlowContext context){var request = context.Request;lock (CompletedUrls){//过滤var url = request.RequestUri.ToString();CompletedUrls.Add(url);if (url == "http://axx.com/"){context.AddFollowRequests(new[] { new Uri("http://bxx.com") });}}return Task.CompletedTask;}public override Task InitializeAsync(){return Task.CompletedTask;}}public TestSpider(IOptions options, DependenceServices services,ILogger logger) : base(options, services, logger){}protected override async Task InitializeAsync(CancellationToken stoppingToken = default){await AddRequestsAsync(new Request("http://axx.com"));AddDataFlow(new MyDataParser());}
} Html数据解析
public async Task XpathFollow()
{
var request = new Request("http://xxx.com");
var dataContext =
new DataFlowContext(null, new SpiderOptions(), request,
new Response {Content = new ByteArrayContent(File.ReadAllBytes("cnblogs.html"))});var dataParser = new TestDataParser();dataParser.AddFollowRequestQuerier(Selectors.XPath(".//div[@class='pager']"));await dataParser.HandleAsync(dataContext);
var requests = dataContext.FollowRequests;Assert.Equal(12, requests.Count);Assert.Contains(requests, r => r.RequestUri.ToString() == "http://cnblogs.com/sitehome/p/2");
} 配置解析
private class N : EntityBase
{[ValueSelector(Expression = "./div[@class='title']")]public string title { get; set; }[ValueSelector(Expression = "./div[@class='dotnetspider']")]public string dotnetspider { get; set; }
} 项目地址
https://github.com/dotnetcore/DotnetSpider
- End -
欢迎加入 .Net编程学习小圈子 ,获取海量的编程学习资源、学习路线,和大家一起打卡、分享编程知识、共同进步。
分享一套.NetCore从入门到精通视频教程
点击下方公众号卡片,关注我
回复“888”,免费领取
推荐阅读
推荐一个前后端分离.NetCore+Angular快速开发框架
阅读开源项目源代码的方法与心得
一个强大、支持100多种格式.Net图片操作库
基于.NetCore+React单点登录系统
一款统计摸鱼时长的开源项目
觉得好看 点个在看👇
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
