首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP HTML 解析器 simple_html_dom 完整指南

     編輯:PHP 綜合知識

簡介

simple_html_dom 是一套純 PHP 實作的 HTML DOM 解析器,特色:

  • 可解析不符合 W3C 標準的「髒亂」HTML
  • 提供類 jQuery 選擇器語法(id、class、tag、屬性)
  • 支援節點增刪改、屬性存取、輸出完整/部分 HTML
  • 專案位址:GitHub

基本用法:建立 DOM 物件並載入來源

<?php
require_once 'simple_html_dom.php'; // 需先下載並引入

$html = new simple_html_dom();

// 1. 從 URL 載入
$html->load_file('https://example.com');

// 2. 從字串載入
$html->load('<html><body>Hello</body></html>');

// 3. 從本地檔案載入
$html->load_file('path/to/file.html');
?>
建議:抓取遠端網頁時,優先使用 cURL 取得內容後再 load(),可控制逾時、Header、Cookie 等細節。

元素查找:find() 方法詳解

回傳元素物件陣列,若指定索引則回傳單一物件或 null。

<?php
// 所有 <a>
$links = $html->find('a');

// 第 1 個 <a> (索引 0)
$firstLink = $html->find('a', 0);

// id="main" 的 <div>
$main = $html->find('div[id=main]', 0);

// 所有有 id 屬性的 <div>
$divs = $html->find('div[id]');

// 所有有 id 屬性的元素
$allWithId = $html->find('[id]');

// 類 jQuery 選擇器
$container = $html->find('#container');
$fooItems  = $html->find('.foo');
$multi     = $html->find('a, img');
$attrSel   = $html->find('a[title], img[title]');

// 子元素查找
$listItems = $html->find('ul li');
$selected  = $html->find('ul li.selected');
?>

DOM 遍歷便利屬性

<?php
$e = $html->find('#someId', 0);
$e->parent;           // 父元素
$e->children;         // 所有子元素陣列
$e->children(0);      // 第 1 個子元素
$e->first_child();    // 第一個子元素
$e->last_child();     // 最後一個子元素
$e->prev_sibling();   // 上一個同層元素
$e->next_sibling();   // 下一個同層元素
?>

元素屬性與內容操作

讀取屬性

$link = $a->href;                    // 直接存取屬性
$link = $html->find('a', 0)->href;   // 串聯寫法

四大基本屬性

屬性說明
tag標籤名稱
innertextinnerHTML
outertextouterHTML
plaintext純文字內容(去除標籤)

修改/刪除屬性

$a->href = 'https://new-url.com';  // 修改
$a->href = null;                   // 刪除
if (isset($a->href)) { ... }       // 判斷是否存在

包裹/插入/刪除元素(變通 outertext)

// 包裹
$e->outertext = '<div class="wrap">' . $e->outertext . '</div>';

// 刪除
$e->outertext = '';

// 尾部插入
$e->outertext .= '<div>foo</div>';

// 頭部插入
$e->outertext = '<div>foo</div>' . $e->outertext;

輸出與記憶體管理

<?php
// 直接輸出整份文件
echo $html;

// 或指定元素輸出
echo $html->find('#content', 0);

// 【重要】用畢釋放記憶體,避免大量解析導致 OOM
$html->clear();
unset($html);
?>
解析器內部建立大量物件樹,處理多份文件時務必呼叫 clear(),否則記憶體會持續增長導致腳本中止。

屬性選擇器速查表

語法說明
[attr]包含該屬性
[attr=val]屬性值等於 val
[attr!=val]屬性值不等於 val
[attr^=val]屬性值以 val 開頭
[attr$=val]屬性值以 val 結尾
[attr*=val]屬性值包含 val
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved