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

PHP 解析 HTML 神器:PHP Simple HTML DOM Parser 使用指南(jQuery 風格選擇器)

     編輯:PHP 綜合知識

為什麼選擇它?

原生 DOMDocument + DOMXPath 雖強大但 API 繁瑣、容錯差(嚴格要求合法 XML/HTML)。PHP Simple HTML DOM Parser 提供:

  • jQuery 風格 CSS 選擇器(find('div.content a'))。
  • 極強容錯(自動修補斷標籤、編碼自動檢測)。
  • 鏈式操作、DOM 遍歷、屬性/文本/註釋提取一站式。
  • 支援字符串、URL、文件三種來源創建 DOM。

安裝與引入

// 方式 1:Composer (推薦,現代項目)
composer require sunra/php-simple-html-dom-parser

// 方式 2:手動下載 simple_html_dom.php 放入項目
include_once 'simple_html_dom.php';

三種創建 DOM 對象方式

<?php
// 1. 從字符串
$html = str_get_html('<html><body>Hello!</body></html>');

// 2. 從 URL 直接抓取(內部用 file_get_contents/curl)
$html = file_get_html('https://example.com/article');

// 3. 從本地文件
$html = file_get_html('storage/page.html');

核心 API:find() 選擇器大全

元素對象常用屬性與方法

$el = $html->find('div.article', 0);

// 屬性
$el->href;        // 獲取 href 屬性 (若為 <a>)
$el->src;         // 獲取 src
$el->id;          // 獲取 id
$el->class;       // 獲取 class
$el->tag;         // 標籤名 'div'
$el->outertext;   // 含標籤的完整 HTML
$el->innertext;   // 內部 HTML
$el->plaintext;   // 純文本 (去標籤)

// 方法
$el->getAttribute('data-id'); // 通用獲取屬性
$el->children();              // 直接子元素陣列
$el->parent();                // 父元素
$el->next_sibling();          // 下一個同級
$el->prev_sibling();          // 上一個同級

鏈式操作與遍歷實戰

// 鏈式:找到 #div1 -> 第 2 個子元素 -> 第 2 個子元素 -> 第 3 個子元素 -> 取 id
echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id;

// 等價 DOM 標準寫法
echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');

// 遍歷所有圖片鏈接
foreach ($html->find('img') as $img) {
    echo $img->src . '<br>';
}

// 修改 DOM 並輸出
$html->find('a.external', 0)->href = 'https://new-target.com';
$html->find('a.external', 0)->target = '_blank';
echo $html->save(); // 輸出修改後的完整 HTML

進階技巧與避坑

  1. 編碼處理:抓取遠程頁面時,庫會嘗試從 Content-Type 或 <meta charset> 檢測編碼。若檢測失敗導致亂碼,可強制指定:$html = file_get_html($url, false, null, -1, 'UTF-8');(參考庫版本參數)。
  2. 內存佔用:大頁面(>2MB)解析較佔內存。爬蟲建議:stream_get_contents 分塊讀取 + 正則預提取目標區塊 -> 再餵給解析器。
  3. 現代替代品:symfony/dom-crawler (配合 CssSelector 組件)、**Masterminds/HTML5-PHP** (標準 HTML5 解析器)、**wa72/htmlpagedom** (DOMDocument 封裝,輕量)。新項目優先考慮標準庫封裝。
  4. 清理資源:循環解析大量頁面時,及時 unset($html); $html = null; 釋放循環引用內存。

總結

PHP Simple HTML DOM Parser 以「jQuery 風格選擇器 + 強容錯」降低了 PHP 解析 HTML 的門檻,是快速開發爬蟲、內容提取、頁面清洗的利器。理解其 find() 選擇器語法、元素對象屬性、鏈式遍歷,即可應對 95% 解析場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
代碼說明返回類型
$html->find('a')所有 <a> 標籤元素對象陣列
$html->find('a', 0)第 1 個 <a> (0-based)單個元素對象 / null
$html->find('a', -1)最後一個 <a>單個元素對象 / null
$html->find('div[id]')有 id 屬性的 <div>陣列
$html->find('div[id=main]')id=main 的 <div>陣列
$html->find('.content .title')後代選擇器陣列
$html->find('#main > ul > li')子代選擇器陣列
$html->find('img[data-src]')屬性存在選擇器陣列
$html->find('text')所有文本節點(特殊)陣列
$html->find('comment')所有註釋節點 (特殊)陣列