-
Notifications
You must be signed in to change notification settings - Fork 0
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文档的工具,使用XPATH,可以方便的获取需要的内容。
代码托管地址:
https://github.com/zzzprojects/html-agility-pack
官网:
http://html-agility-pack.net/
使用Nuget,安装 HtmlAgilityPack 即可,目前最新版本为:1.6.1
有如下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);
可以使用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 元素。