Skip to content

69 .NET Core利用Html Agility Pack解析HTML

Jinxin Chen edited this page Dec 11, 2019 · 1 revision

写.NET Core的同学有福了,解析Html,可以用Html Agility Pack来快速得到需要的内容

什么是Html Agility Pack?

Html Agility Pack是一个生成和解析和html文档的工具,使用XPATH,可以方便的获取需要的内容。

代码托管地址:

https://github.com/zzzprojects/html-agility-pack

官网:

http://html-agility-pack.net/

安装和使用 Html Agility Pack

使用Nuget,安装 HtmlAgilityPack 即可,目前最新版本为:1.6.1

加载html

有如下3种方式来加载html:

// From File
var doc = new HtmlDocument();
doc.Load(filePath);

// From String
var doc = new HtmlDocument();
doc.LoadHtml(html);

// From Web
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var doc = web.Load(url);

解析html

可以使用xpath或者linq方式来解析html:

// With XPath	
var value = doc.DocumentNode
.SelectNodes("//td/input")
.First()
.Attributes["value"].Value;

// With LINQ	
var nodes = doc.DocumentNode.Descendants("input")
.Select(y => y.Descendants()
.Where(x => x.Attributes["class"].Value == "box"))
.ToList();

关于xpath的语法,可以从下面链接查看更多用法:XPath 语法

常用实例:

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
  • | 匹配任何元素节点。 @* | 匹配任何属性节点。 node() | 匹配任何类型的节点。 /bookstore/* | 选取 bookstore 元素的所有子元素。 //* | 选取文档中的所有元素。 //title[@*] | 选取所有带有属性的 title 元素。
Clone this wiki locally