woff 發表於 2013-7-11 22:39:22

PHP抓取網頁內容解析(PHP Simple HTML DOM Parser)

抓取網頁內容,要取得想要的資料,常要解析HTML,
如果已經會使用 jQuery 可以考慮使用 PHP Simple HTML DOM Parser 來解析。
官方網站:http://simplehtmldom.sourceforge.net/

官網有很詳盡的使用說明:http://simplehtmldom.sourceforge.net/manual.htm

使用上很簡單
先到 http://sourceforge.net/project/showfiles.php?group_id=218559 下載檔案。
解壓縮後,只須要裡面 simple_html_dom.php 這個檔。

使用時,要先取得 DOM物件。
取得 DOM物件的方式有三種:



[*]給HTML解析
$html = str_get_html('<html><body>Hello!</body></html>');
[*]給網址解析
$html = file_get_html('http://example.com/');
[*]給一個網頁檔
$html = file_get_html('test.htm');
取得 DOM物件後,便可以用jQuery的選擇器語法,來取得想要的內容。
假設欲解析的HTML內容如下: <div id="list">
<ul>
<li>xx1</li>
<li>xx2</li>
</ul>
<ul>
<li>yy1</li>
<li>yy2</li>
</ul>
</div>


解析範例:
require_once('simple_html_dom.php');
$html = file_get_html('http://example.com');
$res=$html->find("#list ul");//抓取<div id="list">底下所有的<ul>
foreach($res as $k=>$a){
$b = $a->find("li");
$v1 = $b->plaintext;//第一次迴圈:xx1,第二次迴圈:yy1
$v2 = $b->plaintext;//第一次迴圈:xx2,第二次迴圈:yy2
}


備註:




[*]若需要使用 POST 的方式取得資料,看 simple_html_dom.php 裡面 file_get_html() 的寫法,發現此函式使用 call_user_func_array(),把接收的參數傳給 file_get_contents() 取得網頁資料。所以可以參考
http://php.net/manual/en/function.file-get-contents.php 的用法,以 POST 方式取得資料。
範例如下:
[*]$data=array('p1' => 'aa', 'p1' => 'bb');//POST 的資料$data_url = http_build_query($data);$data_len = strlen ($data_url);   $request = array(    'http' => array (      'method' => 'POST',      'content' => $data_url,      'header' => "Content-type: application/x-www-form-urlencoded\r\n" .      "Content-Length: " . $data_len . "\r\n"    ) );$context = stream_context_create($request);$html = file_get_html('http://example.com', false, $context);


[*]類似 POST 取得資料的使用方式,官網說明提供一個使用 proxy 的使用範例。
http://simplehtmldom.sourceforge.net/manual_faq.htm#proxy
頁: [1]
查看完整版本: PHP抓取網頁內容解析(PHP Simple HTML DOM Parser)