C# 都有哪些爬虫框架? | 您所在的位置:网站首页 › 决战江南电视剧32集姐妹相认 › C# 都有哪些爬虫框架? |
如果我们需要抓取网络上的数据,这时候我们就要写爬虫,这里面就涉及到网页的抓取、以及网页分析与数据提取、抓取的性能等知识,今天就给大家推荐一个开源项目,它可以很好解决你的问题,让你更专注业务的开发。 更多开源项目请查看:一个专注推荐.Net开源项目的榜单项目简介这是一个基于.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 - 推荐阅读 推荐一个前后端分离.NetCore+Angular快速开发框架 阅读开源项目源代码的方法与心得 一个强大、支持100多种格式.Net图片操作库 基于.NetCore+React单点登录系统 一款统计摸鱼时长的开源项目 |
CopyRight 2018-2019 实验室设备网 版权所有 |