一、环境准备
1. 引用方式
两种主流方案:
- 老式方案:手动引入
HtmlAgilityPack.dll - 推荐方案:NuGet 安装包
Install-Package HtmlAgilityPack
2. 核心常用类
| 类名 | 作用 |
|---|---|
HtmlDocument | HTML文档载体,负责加载HTML源码 |
HtmlWeb | 网络请求类,直接访问URL获取网页HTML |
HtmlNode | HTML单个DOM节点(div/a/p等标签) |
HtmlNodeCollection | HtmlNode集合,多条查询结果 |
二、两种加载HTML方式
最终都会得到 HtmlDocument 对象
1:加载本地文件 / HTML字符串
- 加载本地HTML文件
using HtmlAgilityPack;
using System.Text;
HtmlDocument document = new HtmlDocument();
// 加载本地文件,指定编码
document.Load("news.htm", Encoding.UTF8);Code language: JavaScript (javascript)
- 加载HTML文本字符串
string htmlStr = "<html>...</html>";
document.LoadHtml(htmlStr);Code language: HTML, XML (xml)
2:在线加载网页
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://example.com");Code language: JavaScript (javascript)
三、节点查询
// 1. 创建文档对象
HtmlDocument document = new HtmlDocument();
// 2. 读取本地html文件
document.Load("news.htm", Encoding.UTF8);
// 3. 获取文档根节点
HtmlNode rootNode = document.DocumentNode;
// 4. 使用XPath批量查询节点,返回节点集合
HtmlNodeCollection newsList = rootNode.SelectNodes(
@"//html/body/div[@class='content']/div/div[@class='left']/div[1]/div[@class='blk12']/div[@class='blk122']/a"
);Code language: JavaScript (javascript)
关键方法说明
SelectSingleNode("XPath"):匹配第一个符合条件节点,返回HtmlNodeSelectNodes("XPath"):匹配全部符合条件节点,返回HtmlNodeCollection- 课件里写了完整绝对路径,工程实践更推荐使用相对全局查找简化XPath,降低页面改版导致xpath失效风险:
//div[@class='blk122']/aCode language: JSON / JSON with Comments (json)
四、遍历获取内容示例
if(newsList != null)
{
foreach(HtmlNode aNode in newsList)
{
string title = aNode.InnerText; // 获取标签内文字
string link = aNode.GetAttributeValue("href",""); // 获取href属性
}
}Code language: PHP (php)
五、重要属性速查
.InnerText:标签内部纯文本.InnerHtml:标签内部包含子标签的HTML源码.OuterHtml:当前标签自身+内部全部HTMLGetAttributeValue("属性名","默认值"):安全读取标签属性