应用

一、环境准备

1. 引用方式

两种主流方案:

  1. 老式方案:手动引入 HtmlAgilityPack.dll
  2. 推荐方案:NuGet 安装包
Install-Package HtmlAgilityPack
2. 核心常用类
类名作用
HtmlDocumentHTML文档载体,负责加载HTML源码
HtmlWeb网络请求类,直接访问URL获取网页HTML
HtmlNodeHTML单个DOM节点(div/a/p等标签)
HtmlNodeCollectionHtmlNode集合,多条查询结果

二、两种加载HTML方式

最终都会得到 HtmlDocument 对象

1:加载本地文件 / HTML字符串
  1. 加载本地HTML文件
using HtmlAgilityPack;
using System.Text;

HtmlDocument document = new HtmlDocument();
// 加载本地文件,指定编码
document.Load("news.htm", Encoding.UTF8);Code language: JavaScript (javascript)
  1. 加载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"):匹配第一个符合条件节点,返回 HtmlNode
  • SelectNodes("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:当前标签自身+内部全部HTML
  • GetAttributeValue("属性名","默认值"):安全读取标签属性

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注