HtmlAgilityPack的简单使用

HtmlAgilityPack可以对Html进行解析,获取某个标签的属性的值、InnerText、InnerHtml等,还可以去除js代码,css样式和注释。

using HtmlAgilityPack;
 
HtmlDocument htmlDocContent = new HtmlDocument();
htmlDocContent.LoadHtml(strHtmlContent);
htmlDocContent.DocumentNode为这段Html的根标签,它的ChildNodes属性为其子标签。
比如,要获取这段Html中所有的img的src属性的值,和每个标签的InnerText,可以通过递归获取
复制代码
StringBuilder sbContent = new StringBuilder();
            if (node.ChildNodes.Count < 1)
            {
                if (node.InnerText.IsNotNullOrEmpty())
                {
                    sbContent.AppendLine(string.Concat("<txt>", node.InnerText, "</txt>"));
                }
                if (string.Equals(node.Name, "img", StringComparison.InvariantCultureIgnoreCase) && node.Attributes.Contains("src"))
                {
                    sbContent.AppendLine(string.Concat("<img>", FormatHtml.GetFullImageUrl(node.Attributes["src"].Value, siteUrl), "</img>"));
                }
                return sbContent.ToString();
            }
            foreach (HtmlNode childNode in node.ChildNodes)
            {
                sbContent.Append(FormatHtml.GetContent(childNode, siteUrl));
            }
            return sbContent.ToString();
复制代码

如果这段html中只有一个标签或者有多个同级标签,那么HtmlAgilityPack会自动生成一个根标签。

HtmlAgilityPack还可以处理js代码,css样式和注释

复制代码
foreach (HtmlNode nodeScripte in node.Descendants("script").ToList())
            {
                nodeScripte.Remove();
            }
            foreach (HtmlNode nodeStyle in node.Descendants("style").ToList())
            {
                nodeStyle.Remove();
            }
            foreach (HtmlNode nodeComment in node.Descendants("//comment()").ToList())
            {
                nodeComment.Remove();
            }
复制代码

 

posted @   DCLancer  阅读(1570)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
(function() { var c = document.createElement('script'); c.type = 'text/javascript'; c.async = true; c.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'www.clicki.cn/boot/48212'; var h = document.getElementsByTagName('script')[0]; h.parentNode.insertBefore(c, h); })();
点击右上角即可分享
微信分享提示