[轉貼]PHP抓取網頁內容解析(PHP Simple HTML DOM Parser)

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *