首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 解析 HTML 網頁標籤提取超連結與標題:自製 CWebHost 類別處理相對/絕對路徑、JavaScript、框架頁

     編輯:關於VC++

雖可透過 MSHTML (IHTMLDocument2::get_links) 取得連結,但為了深入理解解析邏輯、支援特殊格式 (如 url=...、JavaScript 動態生成、相對路徑轉絕對),本文實作一個純字串分析類別 CWebHost,從 HTML 原始碼提取所有超連結 URL 與連結文字。

類別介面


// 唯一公開介面:建構函式即完成分析
CWebHost(
  const CString& strWebCode,   // 完整 HTML 內容
  vector<HyperLink>& vecURL,   // 輸出:超連結結構陣列
  CString& strBaseURL          // 當前頁面基礎 URL (用於相對路徑轉換)
);

struct HyperLink {
  CString strHyperlink;      // 解析後的絕對 URL
  CString strHyperlinkText;  // 連結文字 (anchor text)
};

內部核心函式流程

  1. OnReturnWebContent:主流程入口,依序呼叫各解析函式。
  2. OnGetHtmlURL:解析標準 <a href="...">、<area href="...">、<link href="...">。
  3. OnGetJumpURL:解析 Meta Refresh、<meta http-equiv="refresh" content="...;url=...">。
  4. OnReturnFrameURL:遞迴解析 <frame src="...">、<iframe src="..."> 巢狀頁面。
  5. OnAnalyseJavascript:簡易掃描 <script> 區塊,提取 location.href=、window.open( 等動態 URL (已知有誤報/漏報)。
  6. OnConversionURL:將相對路徑 (../page.html、/dir/page.html、page.html) 依 strBaseURL 轉為絕對 URL。
  7. OnGetLinkText:提取 <a>文字</a> 內容,處理巢狀標籤、實體編碼 (&nbsp;)。

處理流程圖解

CWebHost 處理流程圖

已知限制與改進方向

  • JavaScript 解析極其簡易,無法處理混淆/壓縮/動態拼接字串。
  • 不支援 CSS background-image: url(...)、@import 等資源連結。
  • HTML 容錯能力弱:屬性未加引號、大小寫混雜、跨行標籤可能解析失敗。
  • 建議改用 HTML Parser 庫 (如 Gumbo、libxml2、AngleSharp) 或直接使用 MSHTML/WebView2 取得 DOM 樹後遍歷。

編譯環境

  • VC 7.1 (VS 2003) / Windows Server 2003
  • MFC / STL (vector, string)

原始碼結構


CWebHost.h/cpp       // 主類別
URLStruct.h          // HyperLink 結構定義
// 其餘輔助函式內含於 CWebHost.cpp
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved