2009-11-01

[PHP] 好用的 HTML 解析工具

PHP Simple HTML DOM Parser Manual

之前為了解析 HTML 所找到的工具
這是 S.C. Chen 所製作的工具
作者文章:PHP Simple HTML DOM Parser 強力解析html工具
檔案下載:PHP Simple HTML DOM Parser

具有以下特點:
  1. 只支援PHP5以上
  2. 可以分析不嚴謹(invalid)的HTML.
  3. 支援簡單的 CSS Selector.
  4. 簡單的DOM操作
  5. 會維持HTML中的原始格式.


對於可以支援 CSS Selector 就夠方便了
幾本上函數操作跟 JavaScript 差不多
使用起來的確蠻方便的

不過在實際使用後發現對於不嚴謹 HTML 的解析會有意想不到的問題出現,由於元素的結束點判斷不正確而出現遞迴效應,造成大量使用記憶體空間,最好還是避免解析不嚴謹 HTML。


使用範例:
<?php
// 示範如何讀取HTML元素
require_once("simple_html_dom.php");

// 產生DOM物件
$dom = file_get_dom('http://www.google.com/');

// 找出所有網頁連結
$result = $dom->find('a');
foreach($result as $v) {
    echo $v->href;
}

// 找出所有網頁圖片
$result = $dom->find('img');
foreach($result as $v) {
    echo $v->src;
}

// 找出所有網頁中所有id=gbar的div標籤
$result = $dom->find('div#gbar');
foreach($result as $v) {
    echo $v->innertext;
}

// 找出所有網頁中所有calss=gb1的span 標籤
$result = $dom->find('span.gb1');
foreach($result as $v) {
    echo $v->outertext;
}

// 找出所有網頁中所有align=center的'td標籤
$result = $dom->find('td[align=center]');
foreach($result as $v) {
    echo $v->outertext;
}

4 回應:

匿名 提到...

<.div id=web>
<.span class=c1>第一項
<.span class=c2>第二項
<.span class=c1>第三項


不好意思打擾一下,找了好多資料都找不到
請問有辦法取得class=c2的資料嗎?

胡忠晞 Jax 提到...

就是使用 CSS 的語法就可以抓到了啊!
#web span.c2

匿名 提到...

感謝^^,我還是在試試好了
看到您分享的這篇文章好感動(我找了好久)
orz

胡忠晞 Jax 提到...

基本上這個工具蠻強大的
只要不是用 table 排版的網頁
都可以透過 CSS 選擇器的語法很容易的抓到想要的內容
不管是想要取得 src,href...等的屬性也都很容易