實際應用

一、環境準備

1. 引用方式

兩種主流實作方案:

  1. 舊式作法:手動匯入 HtmlAgilityPack.dll
  2. 建議作法:透過 NuGet 安裝套件
Install-Package HtmlAgilityPack
2. 常用核心類別
類別名稱用途說明
HtmlDocumentHTML 文件容器,負責載入 HTML 原始碼
HtmlWeb網路請求類別,直接透過網址抓取網頁 HTML
HtmlNode單一 HTML 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:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *