- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
.NET 库
HTML、SVG、MathML、XML
CSS也可以解析
。 Github: https://github.com/AngleSharp/AngleSharp 使用文档: https://anglesharp.github.io/ 。
LINQPad
介绍:一个小巧,打开秒速,随时能写C#,不至于灵感快速流失的小工具 下载地址: https://www.linqpad.net/ 有免费版,基本功能已经够用。我们公司买了它的Premium版.
如何快速发送网络请求获取到数据呢?
可以用如下: 1、HttpWebRequest 2、WebClient 3、HttpClient 4、RestSharp 5、Flurl 。
本期重点用 HttpClient 来实现 。
引用NuGet包: Install-Package AngleSharp 。
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.Trim()
};
});
}), Newtonsoft.Json.Formatting.Indented));
}
获取博客园200页数据 。
public void ReadData()
{
var data = JsonConvert.DeserializeObject<List<BlogJsonData>>(File.ReadAllText(@"C:\Users\QYM\Desktop\OfficFile\BlogData.json"));
Util.Chart(data
.GroupBy(x => x.DateTime.Hour)
.Select(x => new { Hour = x.Key, ViewCount = 1.0 * x.Sum(v => v.LookPerson) })
.OrderByDescending(x => x.Hour),
x => x.Hour,
y => y.ViewCount, Util.SeriesType.Bar).Dump("时间段观看人数最多");
Util.Chart(data
.GroupBy(x => x.DateTime.Hour)
.Select(x => new { Hour = x.Key, ViewCount = 1.0 * x.Sum(v => v.LookOk) })
.OrderByDescending(x => x.Hour),
x => x.Hour,
y => y.ViewCount, Util.SeriesType.Bar).Dump("时间段点赞人数最多");
Util.Chart(data
.GroupBy(x => x.DateTime.DayOfWeek)
.Select(x => new { WeekDay = x.Key, ArticleCount = x.Count() })
.OrderBy(x => x.WeekDay),
x => x.WeekDay.ToString(),
y => y.ArticleCount, Util.SeriesType.Bar).Dump("星期几发文章最多");
Util.Chart(data
.GroupBy(x => x.Name)
.Select(x => new { UserName = x.Key, ArticleCount = x.Count() })
.OrderByDescending(x => x.ArticleCount)
.Take(9),
x => x.UserName,
y => y.ArticleCount, Util.SeriesType.Bar).Dump("哪个大佬发文章比较多");
}
源文件Json 。
public class BlogJsonData
{
public string Url { get; set; }
public string Title { get; set; }
public string Context { get; set; }
public string Name { get; set; }
public DateTime DateTime { get; set; }
public int LookOk { get; set; }
public int LookPerson {get;set;}
}
接下来就是见证奇迹的时候,通过分析抓取到html,保存成Json分析出一些意想不到的图表 。
看来博客园一般查看人数最多的是9点->10点,说明哈哈哈,果然大家早上都是喜欢关注编程的大事呀 。
果然早起的鸟儿有虫吃,如果想要博客点赞高,那就必须早上九点 -> 10点 抓住阅读高峰期,菜鸟收获高赞,得到很多人的认可 。
看来星期一到星期五中发博客最多的星期一和星期二,最不想上班的两天最适合用来灵感创作写文字 。
目测近期京东云开发者对博客园贡献很大,看了一下,质量都是很高的文章,极力推荐 。
原文地址: https://blog.baibaomen.com/用anglesharp-linqpad抓取分析博客园排行榜/ 。
最后此篇关于用AngleSharp&LINQPad抓取分析博客园排行榜的文章就讲到这里了,如果你想了解更多关于用AngleSharp&LINQPad抓取分析博客园排行榜的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 AngleSharp 解析文档。我有一个文本节点 (NodeName: "#text"),我想在其中插入一些 HTML。我当然可以将 NodeValue 重置为我想要的任何值,但它仍然是一
无论如何让AngleSharp在解析片段时不创建完整的HTML文档。例如,如果我解析: The Title 我在 DocumentElement.OuterHtml 中得到一个完整的 HTML 文档:
所以我使用的是 .NetFW 4.7.1,并且在实例化 Premailer.Net 时出现以下错误: Could not load type AngleSharp.Parser.Html.HtmlPa
我想知道是否可以使用 AngleSharp 从 HTMLDocument 中提取格式化文本。我正在使用以下代码来提取文本。我遇到的问题是提取的文本一起运行,每个元素之间没有中断。 var parser
我正在使用 AngleSharp 开发有限的浏览器功能.它解析 HTML 的方式让我有点困惑。例如,以下“div”的内容被解析为一个 BR 子元素和一个带有文本“test”的 TextContent
当您没有要使用的类名或 ID 时,找不到许多使用 AngleSharp 进行解析的示例。 HTML 我想从任何 中找到 href标题为 Bing 的标签 在 Python BeautifulS
在 AngleSharp IHtmlAnchorElement 中有 DoClick() 方法。在我的例子中,我需要点击一个 div。我该怎么做? HTML: C#: IHtmlAnchorElem
我开始在一个项目中使用 Anglesharp,我不仅需要获取和下载 HTML,还需要获取和下载文档的图像。我知道在 Document 对象中有一个名为 Images 的属性,但显然它并没有得到所有这些
尝试使用 AngleSharp 解析 HTML 并遇到问题 https://opensource.org/licenses/MS-PL 以下代码在 Linqpad 中运行时返回“0” var url
我将 AngleSharp 和 AngleSharp.Scripting.Javascript 的 nuget 包导入到一个空项目中,以查看在应用 javascript/css 后是否可以从网页解析
对于这个具体的例子,我正在处理 input标签做一些工作并用自定义标签替换它们。输出为 .. var parser = new HtmlParser(); var html = parser.pars
我正在使用 AngleSharp要解析 HTML5,我现在正在做的是用一些 HTML 包装我想要解析的元素,使其成为有效的 HTML5,然后在其上使用解析器,有更好的做法吗?意思是,直接解析特定元素并
我想试试我的手和网页抓取。我注意到 Anglesharp 非常适合 .Net 环境。我正在尝试从 yelp 站点获取所有描述和评级的列表,但我没有收到任何错误或任何结果。这是 html 外观的一个子集
我正在尝试使用 AngleSharp 解析 HTML 网页及其 CSS。遗憾的是,我只找到了折旧的示例,并且我正在努力寻找最新的实现。 目前,我正在尝试这样做: var config = Conf
我能否创建一个 private static readonly HtmlParser HtmlParser = new HtmlParser(); 并在多个线程中安全地使用它? 或者我应该为每个线程或
我正在尝试从下面提到的网站中提取价格。我正在使用 AngleSharp用于提取。在网站上,价格列在下面(作为示例): 650.00 我正在使用以
我正在尝试使用 AngleSharp 库解析一些 HTML,到目前为止它一直很棒。我现在偶然发现了一个我想解析以下 HTML 片段的场景: Link 1 Some text that happens
如何使用 AngleSharp 从 HTML 字符串中找到所有评论标签。评论可以是单行,也可以是多行。 最佳答案 您可以使用 AngleSharp.Extensions.ApiExtensions
与 AngleSharp ,加载 HTML 页面并等待所有样式表下载(如果需要)并且所有脚本都准备好执行解析器,我这样做 public sealed class WebReader {
我有一段这样的代码可以在 AngleSharp 0.9.3 中运行: public IEnumerable FindNodesInStyle(StyleContext context) { i
我是一名优秀的程序员,十分优秀!