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(‘Hello!’);
給網址解析
$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[0]->plaintext;//第一次迴圈:xx1,第二次迴圈:yy1 $v2 = $b[1]->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
資料來源: http://xyz.cinc.biz/2012/10/phpphp-simple-html-dom-parser.html