Simple HTML DOM 是 PHP 知名的 HTML 解析庫,提供類似 jQuery 的選擇器語法,讓伺服器端處理 HTML 如同瀏覽器端般直觀。
require_once 'simple_html_dom.php';
$dom = new simple_html_dom();
// 從字串載入
$dom->load($html);
// 或從檔案/URL 載入
$dom->load_file('https://example.com');
支援 CSS 選擇器語法,回傳元素陣列或單一元素:
// 取得第一個符合的元素 (索引 0)
$element = $dom->find('div.lookLeftname', 0);
// 取得所有符合的元素
$elements = $dom->find('div.lookLeftname');
| 屬性/方法 | 說明 | 範例 |
|---|---|---|
plaintext | 純文字內容 (去除標籤) | $el->plaintext |
innertext | 內部 HTML 內容 | $el->innertext |
outertext | 包含自身的完整 HTML | $el->outertext |
href, src, class... | 直接存取屬性 | $el->href |
tag | 標籤名稱 | $el->tag |
id | 元素 ID | $el->id |
$html = file_get_contents('https://news.example.com');
$dom = new simple_html_dom();
$dom->load($html);
$articles = [];
foreach ($dom->find('article h2 a') as $link) {
$articles[] = [
'title' => $link->plaintext,
'url' => $link->href,
'time' => $link->find('time', 0)?->datetime ?? ''
];
}
$dom->clear(); // 釋放記憶體
unset($dom);
print_r($articles);
// ID 選擇器
$dom->find('#main-content')
// 類別選擇器
$dom->find('.article-list .item')
// 屬性選擇器
$dom->find('a[target=_blank]')
$dom->find('img[data-src]')
// 後代/子代組合
$dom->find('ul > li:first-child')
$dom->find('table tr:nth-of-type(2)')
// 多重選擇器
$dom->find('h1, h2, h3')
$dom->clear() 釋放循環參考unset($dom) 確保記憶體回收| 優點 | 缺點 |
|---|---|
| 語法直觀、學習曲線低 | 大文件記憶體佔用高 |
| 支援不完整/錯誤的 HTML | 效能不如原生 DOMDocument |
| 選擇器功能豐富 | 非標準 HTML 可能解析異常 |