获取文档对象
1. 创建文档对象
HtmlDocument document = new HtmlDocument();Code language: JavaScript (javascript)
2. 两种加载方式
1)加载HTML字符串
document.LoadHtml(htmlString);Code language: JavaScript (javascript)
2)加载本地HTML文件(指定编码防止乱码)
document.Load(@"c:/news.html", Encoding.UTF8);Code language: JavaScript (javascript)
Windows路径推荐使用
@禁止转义;课件中c://news.html是写法示例。
3. 获取根节点
HtmlNode rootNode = document.DocumentNode;Code language: JavaScript (javascript)
所有xpath查询都基于rootNode进行。
节点操作
1. 从节点HTML创建新节点
HtmlNode newNode = HtmlNode.CreateNode(newsNode.OuterHtml);
OuterHtml:包含自身标签+内部所有HTML- 常用于复制节点、截取局部HTML单独解析
2. 查询节点
SelectSingleNode("XPath"):匹配第一个节点,返回HtmlNode
HtmlNode childNode = itemNode.SelectSingleNode("//div[1]");Code language: JavaScript (javascript)
SelectNodes("XPath"):匹配全部节点,返回HtmlNodeCollection
3. 读取文本与属性
- 获取节点内纯文本
string text = itemNode.InnerText;
- 获取标签属性(基础写法)
string href = itemNode.Attributes["href"].Value;Code language: JavaScript (javascript)
风险:如果标签不存在
href属性,直接Attributes["href"]会返回null,代码报错。
推荐安全写法:
string href = itemNode.GetAttributeValue("href", "");Code language: JavaScript (javascript)
4. 遍历新闻列表完整示例代码
foreach (HtmlNode item in newsList)
{
string title = item.InnerText;
string href = item.Attributes["href"].Value;
}Code language: PHP (php)
补充
- 空值问题
SelectNodes()找不到匹配节点时返回null,foreach遍历前必须判断:
if(newsList != null)
{
foreach(var item in newsList){ ... }
}Code language: PHP (php)
- InnerText / InnerHtml / OuterHtml 区分
InnerText:只提取文字,剔除所有标签InnerHtml:节点内部HTML,不含自身标签OuterHtml:自身标签 + 内部全部HTML
- XPath小提示
//div代表全局搜索所有div;不加//代表直接子节点匹配。
完整例子
using HtmlAgilityPack;
using System.Text;
//1.初始化文档
HtmlDocument document = new HtmlDocument();
document.Load("news.htm", Encoding.UTF8);
HtmlNode rootNode = document.DocumentNode;
//2.批量查询新闻链接
HtmlNodeCollection newsList = rootNode.SelectNodes(@"//div[@class='blk122']/a");
if(newsList != null)
{
foreach (HtmlNode item in newsList)
{
string title = item.InnerText.Trim();
string link = item.GetAttributeValue("href", "");
Console.WriteLine($"标题:{title} 链接:{link}");
}
}Code language: JavaScript (javascript)
Previous: 应用