电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

用AngleSharp & LINQPad抓取分析博客园排行榜

来源:金蝶云社区作者:金蝶2024-09-165

用AngleSharp & LINQPad抓取分析博客园排行榜

用AngleSharp & LINQPad抓取分析博客园排行榜

AngleSharp简单介绍

  1. AngleSharp 是一个 .NET 库

  2. 使您能够解析基于尖括号的超文本,如HTML、SVG、MathML、XML

  3. AngleSharp的一个重要方面是CSS也可以解析

  4. 同时还是开源,免费的

Github: https://github.com/AngleSharp/AngleSharp
使用文档: https://anglesharp.github.io/

开发工具的推荐LINQPad

介绍:一个小巧,打开秒速,随时能写C#,不至于灵感快速流失的小工具
下载地址:https://www.linqpad.net/
有免费版,基本功能已经够用。我们公司买了它的Premium版。

AngleSharp 代码实操

实操前一些分享一些C#的知识点

如何快速发送网络请求获取到数据呢?

可以用如下:
1、HttpWebRequest
2、WebClient
3、HttpClient
4、RestSharp
5、Flurl

本期重点用HttpClient来实现

起手式

引用NuGet包: Install-Package AngleSharp

使用场景案例

  1. 获取博客园排行榜的Html并且解析

IConfiguration config = Configuration.Default.WithDefaultLoader();string address = "https://www.cnblogs.com/aggsite/SideRight";
IBrowsingContext context = BrowsingContext.New(config);
IDocument document = await context.OpenAsync(address);
IHtmlCollection<IElement> side_right = document.QuerySelectorAll("div");

side_right.Select(m => new { 
        title = m.QuerySelector(".card-title a")?.TextContent,
        url = m.QuerySelectorAll("ul li").Select(x => x.TextContent)
       })
       .Where(x => x.title != null)
       .Dump();

通过上面代码快速就能分析且快速抓取博客园的排行榜,简单,快速,高效 代码少,有没有觉得Linq语法糖配合请求一些框架的强大呢,朋友们

效果图

既然都能抓取数据了,接下来就是爬虫最重要的分析啦

2.分析博客园每天什么时候发博客看的人数最多,点赞的人数最多,星期几发文章多,哪个大佬发文章多

获取数据的方法

通过HttpClient加上Linq加上AngleSharp实现请求获取Hmtl => 保存Json => 分析Json 生成有价值的图表

public void GetData(){ var http = new HttpClient(); var parser = new HtmlParser();

 File.WriteAllText(@"C:\Users\QYM\Desktop\OfficFile\BlogData.json", JsonConvert.SerializeObject(Enumerable.Range(1, 200)
     .AsParallel()
     .AsOrdered()
     .SelectMany(page =>
     {      var content = new StringContent(JsonConvert.SerializeObject(new
      {
       CategoryId = "808",
       CategoryType = "SiteHome",
       ItemListActionName = "AggSitePostList",
       PageIndex = $"{page}",
       ParentCategoryId = "0",
       TotalPostCount = "4000"
      }), Encoding.UTF8, "application/json");      var resp = http.PostAsync("https://www.cnblogs.com/AggSite/AggSitePostList", content).Result;      var document = parser.ParseDocument(resp.Content.ReadAsStringAsync().GetAwaiter().GetResult());      return document?.QuerySelectorAll("article").Select(pageContext =>
      {       return new
       {
        Url = pageContext.QuerySelector(".post-item-text a").GetAttribute("href").Trim(),
        Title = pageContext.QuerySelector(".post-item-text a").TextContent.Trim(),
        Context = pageContext.QuerySelector(".post-item-text p").TextContent.Trim(),
        Name = pageContext.QuerySelector("footer a").TextContent.Trim(),
        DateTime = DateTime.Parse(pageContext.QuerySelector("footer .post-meta-item").TextContent),
        LookOK = pageContext.QuerySelector("footer .post-meta-item+a span").TextContent.Trim(),
        LookPerson = pageContext.QuerySelector("footer .post-meta-item+a+a+a span").TextContent.Tr

用AngleSharp & LINQPad抓取分析博客园排行榜

用AngleSharp & LINQPad抓取分析博客园排行榜AngleSharp简单介绍AngleSharp 是一个 .NET 库使您能够解析基于尖括号的超文本,如HTML、SV...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信