2013-03-15

CODE - 用 PHP Simple HTML DOM Parser 來抓網頁內容 part2

續之前這篇 => http://trully622.blogspot.tw/2012/03/code-php-simple-html-dom-parser.html
現在有個需求要抓 http://trully6.pixnet.net/album/video/210798628人氣值, 如下圖
把撰寫的過程紀錄下來

先看一下這個頁的 html 結構
code 如下
include('./simple_html_dom.php');

$url = 'http://trully6.pixnet.net/album/video/210798628';
$html = file_get_html($url);

// 抓 div.box-content -> dl -> dd
$html = $html->find('div.box-content dl dd');
$hit = '';
$cnt = 0;
foreach ($html as $element) {
    $cnt++;
    // 要的 hit 在第三組 dd 裡
    if ($cnt == 3) {
        $hit = $element;
        //error_log($hit);
        // 目前長這樣: 
9 次 / 16 次 (本日/累積)
} } // 把 html tag 都去掉 $hit = strip_tags($hit); //error_log("hit : $hit"); // 目前長這樣: '5 次 / 12 次 (本日/累積)' // 之後再做字串處理即可~

其實 class="box-content" 有好幾個, 右欄的 sidebar 都是包在 box-content 下,
但 box-content 下面有 dl , dd 的, 只有人氣那塊才符合, 所以 code 可以像上面那樣寫就好

然後有幾件事要後記一下
  1. 要看抓回來的 element 不能直接 print_r($element), 會造成 ram 爆掉, 要用 foreach 的方式 log 出來看
  2. 一開始無法用 file_get_html() 取得線上那頁, 我是先存一份一起來 parse, parse 的 code 寫好後, 再試 file_get_html('線上的 url') 就可以了, 原因我也不知道...
  3. 其實要抓人氣值, 直接用下面的 code 就可以了, 因為那個 span id=element_hit_total_210798628 是唯一值, 但因為 pixnet 用了 <!----> 把 span id 包起來, 就 parse 不到了, 不知道是不是故意防止網頁被抓
$html = $html->find('span#element_hit_total_210798628');
foreach ($html as $ele) {
    error_log($ele);
}


沒有留言:

張貼留言