推荐一个.Net Core开发的蜘蛛爬虫开源项目

我是编程乐趣,一个10年.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(".//p[@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 = "./p[@class='title']")]
  public string title { get; set; }


  [ValueSelector(Expression = "./p[@class='dotnetspider']")]
  public string dotnetspider { get; set; }
}


项目地址

https://github.com/dotnetcore/DotnetSpider

我是编程乐趣,一个10年.Net开发经验老程序员,专注开源项目和编程知识分享。

私信回复:【888】,领取.Net视频教程。

- End -

推荐阅读

推荐一个.Ner Core开发的配置中心开源项目

阅读开源项目源代码的方法与心得

推荐一个Dapper扩展CRUD基本操作的开源库

一个基于C#开发的Socket扩展库

一个可视化动画算法网站,值得收藏!

展开阅读全文

页面更新:2024-04-11

标签:爬虫   项目   程序员   蜘蛛   顺序   框架   数量   功能   网页   知识   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top