最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

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

2023-02-09 12:01 作者:百寶門(mén)  | 我要投稿

AngleSharp簡(jiǎn)單介紹

  1. AngleSharp?是一個(gè)?.NET庫(kù)

  2. 使您能夠解析基于尖括號(hào)的超文本,如?HTML、SVG、MathML、XML

  3. AngleSharp的一個(gè)重要方面是?CSS也可以解析

  4. 同時(shí)還是開(kāi)源,免費(fèi)的

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

開(kāi)發(fā)工具的推薦?LINQPad

介紹:一個(gè)小巧,打開(kāi)秒速,隨時(shí)能寫(xiě)C#,不至于靈感快速流失的小工具 下載地址:https://www.linqpad.net/有免費(fèi)版,基本功能已經(jīng)夠用。我們公司買(mǎi)了它的Premium版。

AngleSharp 代碼實(shí)操

實(shí)操前一些分享一些C#的知識(shí)點(diǎn)

如何快速發(fā)送網(wǎng)絡(luò)請(qǐng)求獲取到數(shù)據(jù)呢?

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

本期重點(diǎn)用 HttpClient來(lái)實(shí)現(xiàn)

起手式

引用NuGet包: Install-PackageAngleSharp

使用場(chǎng)景案例

  1. 獲取博客園排行榜的Html并且解析

  1. IConfiguration config = Configuration.Default.WithDefaultLoader();

  2. string address = "https://www.cnblogs.com/aggsite/SideRight";

  3. IBrowsingContext context = BrowsingContext.New(config);

  4. IDocument document = await context.OpenAsync(address);

  5. IHtmlCollection<IElement> side_right = document.QuerySelectorAll("div");

  6. side_right.Select(m => new {

  7. ? ? ? ?title = m.QuerySelector(".card-title a")?.TextContent,

  8. ? ? ? ?url = m.QuerySelectorAll("ul li").Select(x => x.TextContent)

  9. ? ? ? })

  10. ? ? ? .Where(x => x.title != null)

  11. ? ? ? .Dump();

通過(guò)上面代碼快速就能分析且快速抓取博客園的排行榜,簡(jiǎn)單,快速,高效 代碼少,有沒(méi)有覺(jué)得 Linq語(yǔ)法糖配合請(qǐng)求一些框架的強(qiáng)大呢,朋友們

效果圖

既然都能抓取數(shù)據(jù)了,接下來(lái)就是爬蟲(chóng)最重要的分析啦

2.分析博客園每天什么時(shí)候發(fā)博客看的人數(shù)最多,點(diǎn)贊的人數(shù)最多,星期幾發(fā)文章多,哪個(gè)大佬發(fā)文章多

獲取數(shù)據(jù)的方法

通過(guò)HttpClient加上Linq加上AngleSharp實(shí)現(xiàn)請(qǐng)求獲取Hmtl => 保存Json => 分析Json 生成有價(jià)值的圖表

  1. public void GetData()

  2. {

  3. var http = new HttpClient();

  4. var parser = new HtmlParser();

  5. File.WriteAllText(@"C:\Users\QYM\Desktop\OfficFile\BlogData.json", JsonConvert.SerializeObject(Enumerable.Range(1, 200)

  6. ? ? .AsParallel()

  7. ? ? .AsOrdered()

  8. ? ? .SelectMany(page =>

  9. ? ? {

  10. ? ? ?var content = new StringContent(JsonConvert.SerializeObject(new

  11. ? ? ?{

  12. ? ? ? CategoryId = "808",

  13. ? ? ? CategoryType = "SiteHome",

  14. ? ? ? ItemListActionName = "AggSitePostList",

  15. ? ? ? PageIndex = $"{page}",

  16. ? ? ? ParentCategoryId = "0",

  17. ? ? ? TotalPostCount = "4000"

  18. ? ? ?}), Encoding.UTF8, "application/json");

  19. ? ? ?var resp = http.PostAsync("https://www.cnblogs.com/AggSite/AggSitePostList", content).Result;

  20. ? ? ?var document = parser.ParseDocument(resp.Content.ReadAsStringAsync().GetAwaiter().GetResult());

  21. ? ? ?return document?.QuerySelectorAll("article").Select(pageContext =>

  22. ? ? ?{

  23. ? ? ? return new

  24. ? ? ? {

  25. ? ? ? ?Url = pageContext.QuerySelector(".post-item-text a").GetAttribute("href").Trim(),

  26. ? ? ? ?Title = pageContext.QuerySelector(".post-item-text a").TextContent.Trim(),

  27. ? ? ? ?Context = pageContext.QuerySelector(".post-item-text p").TextContent.Trim(),

  28. ? ? ? ?Name = pageContext.QuerySelector("footer a").TextContent.Trim(),

  29. ? ? ? ?DateTime = DateTime.Parse(pageContext.QuerySelector("footer .post-meta-item").TextContent),

  30. ? ? ? ?LookOK = pageContext.QuerySelector("footer .post-meta-item+a span").TextContent.Trim(),

  31. ? ? ? ?LookPerson = pageContext.QuerySelector("footer .post-meta-item+a+a+a span").TextContent.Trim()

  32. ? ? ? };

  33. ? ? ?});

  34. ? ? }), Newtonsoft.Json.Formatting.Indented));

  35. }

效果圖

獲取博客園200頁(yè)數(shù)據(jù)

讀取數(shù)據(jù)并且調(diào)用LinqPad 自帶的Chart圖表方法進(jìn)行分析

  1. public void ReadData()

  2. {

  3. var data = JsonConvert.DeserializeObject<List<BlogJsonData>>(File.ReadAllText(@"C:\Users\QYM\Desktop\OfficFile\BlogData.json"));

  4. Util.Chart(data

  5. .GroupBy(x => x.DateTime.Hour)

  6. .Select(x => new { Hour = x.Key, ViewCount = 1.0 * x.Sum(v => v.LookPerson) })

  7. .OrderByDescending(x => x.Hour),

  8. x => x.Hour,

  9. y => y.ViewCount, Util.SeriesType.Bar).Dump("時(shí)間段觀看人數(shù)最多");

  10. Util.Chart(data

  11. .GroupBy(x => x.DateTime.Hour)

  12. .Select(x => new { Hour = x.Key, ViewCount = 1.0 * x.Sum(v => v.LookOk) })

  13. .OrderByDescending(x => x.Hour),

  14. x => x.Hour,

  15. y => y.ViewCount, Util.SeriesType.Bar).Dump("時(shí)間段點(diǎn)贊人數(shù)最多");

  16. Util.Chart(data

  17. ?.GroupBy(x => x.DateTime.DayOfWeek)

  18. ?.Select(x => new { WeekDay = x.Key, ArticleCount = x.Count() })

  19. ?.OrderBy(x => x.WeekDay),

  20. x => x.WeekDay.ToString(),

  21. y => y.ArticleCount, Util.SeriesType.Bar).Dump("星期幾發(fā)文章最多");

  22. Util.Chart(data

  23. ?.GroupBy(x => x.Name)

  24. ?.Select(x => new { UserName = x.Key, ArticleCount = x.Count() })

  25. ?.OrderByDescending(x => x.ArticleCount)

  26. ?.Take(9),

  27. x => x.UserName,

  28. y => y.ArticleCount, ?Util.SeriesType.Bar).Dump("哪個(gè)大佬發(fā)文章比較多");

  29. }

效果圖

源文件Json


分析數(shù)據(jù)的實(shí)體

  1. public class BlogJsonData

  2. {

  3. public string Url { get; set; }

  4. public string Title { get; set; }

  5. public string Context { get; set; }

  6. public string Name { get; set; }

  7. public DateTime DateTime { get; set; }

  8. public int LookOk { get; set; }

  9. public int LookPerson {get;set;}

  10. }

接下來(lái)就是見(jiàn)證奇跡的時(shí)候,通過(guò)分析抓取到html,保存成Json分析出一些意想不到的圖表

效果圖

  1. 時(shí)間段觀看人數(shù)最多??

看來(lái)博客園一般查看人數(shù)最多的是9點(diǎn)->10點(diǎn),說(shuō)明哈哈哈,果然大家早上都是喜歡關(guān)注編程的大事呀

  1. 時(shí)間段點(diǎn)贊人數(shù)最多??

果然早起的鳥(niǎo)兒有蟲(chóng)吃,如果想要博客點(diǎn)贊高,那就必須早上九點(diǎn) -> 10點(diǎn) 抓住閱讀高峰期,菜鳥(niǎo)收獲高贊,得到很多人的認(rèn)可

  1. 星期幾發(fā)文章最多??

看來(lái)星期一到星期五中發(fā)博客最多的星期一和星期二,最不想上班的兩天最適合用來(lái)靈感創(chuàng)作寫(xiě)文字

  1. 哪個(gè)大佬發(fā)文章比較多??

目測(cè)近期京東云開(kāi)發(fā)者對(duì)博客園貢獻(xiàn)很大,看了一下,質(zhì)量都是很高的文章,極力推薦


用AngleSharp & LINQPad抓取分析博客園排行榜的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
宁陕县| 成武县| 东阿县| 额敏县| 东至县| 邹平县| 清涧县| 琼海市| 博罗县| 鹰潭市| 武安市| 凤翔县| 钦州市| 永安市| 高清| 崇左市| 偃师市| 杨浦区| 玉龙| 大邑县| 海安县| 高陵县| 昔阳县| 仁怀市| 东宁县| 习水县| 漾濞| 东丽区| 舞钢市| 米泉市| 岱山县| 华坪县| 和龙市| 台山市| 黑山县| 平江县| 墨竹工卡县| 丽水市| 镇远县| 太原市| 抚远县|