簡單分析HTML - PHP Simple HTML DOM Parser

網址: http://sourceforge.net/projects/simplehtmldom/

因為使用PHP內建的DOM物件分析HTML實在太痛苦了,
我自己寫了一個放到Sourceforge上, 希望大家能提供一些開發的建議.

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

範例:
<?
// 示範如何讀取HTML元素
include('html_dom_parser.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 . '
';}
?>

<?
// 示範如何修改HTML元素
include('html_dom_parser.php');

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

// 移除網頁中所有圖片
$ret = $dom->find('img');
foreach($ret as $v) {$v->outertext = '';}

// 修改網頁中所有input標籤
$ret = $dom->find('input');
foreach($ret as $v) {$v->outertext = '[INPUT]';}

// 顯示修改後的網頁
echo $dom->save();
?>

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=3218

評論

  • edited 二月 2008
    大概試了一下,PHP 的 DOMDocument 似乎比較嚴謹些;我過去有類似需求的時候習慣用 PCRE 慢慢拆出我需要的資料,現在有了新的選擇,感謝 :)
  • edited 六月 2008
    me578022 :
    用了你的PHP Simple HTML DOM Parser 感觉还不错,
    你能提供一些编写parser解析器的文档资料吗,我很想自己写一个Parser
    ,但是有些正则表达式 我不会,你能提供一些帮助吗?
    我拿xdebug profile 了你的程序,性能应该还有改进的地方.

    我想把它port到java 和lua 上面,基于类似 jquery 的选择器,
    希望你能提供帮助.

    [email protected]

    谢谢
  • edited 十月 2008
    Zend 的 Zend_Dom_Query 也提供了類似的功能,有興趣可以看看這篇使用心得:

    http://raphaelstolt.blogspot.com/2008/10/scraping-websites-with-zenddomquery.html
  • edited 四月 2010
    Symfony 的開發者也寫了一個:
    http://fabien.potencier.org/article/42/parsing-xml-documents-with-css-selectors

    不過是在 PHP 5.3 以上的環境
  • edited 四月 2010
    不知道對於HTML5的效果如何?...不過等到HTML5出來也早就先升級了吧^^?
  • edited 四月 2010
    預期應該不會有太大問題,只要文件結構都符合標準
  • 那如果只要抓取檔頭的title標籤,該如何處理呢?
Sign In or Register to comment.