這是我學習PHP後第一個寫的網頁爬蟲腳本,用的外掛,它是用來解析HTML的結構,如果覺得英文文件看不懂,其他大大的中文教學也看不懂,看看這篇吧!不保證你會看的懂,請確定有PHP的基本知識(我也是努力了許久…)。

請在有網頁伺服器支援PHP的環境下執行PHP腳本,執行環境不再詳述!先到PHP Simple HTML DOM Parser官網下在外掛,ZIP壓縮檔解壓縮到你要的目資料裡,就可以開始寫爬蟲腳本,解壓縮的檔案如下:

在裡面增加一個PHP檔案,檔案為test.php,至於要取什麼名子都隨便啦!再來就開始寫抓取網頁腳本,來抓電商平台的資料吧。

<?php
//先把外掛載進來simple_html_dom.php
include 'simple_html_dom.php';
//讀取網頁資料HTML
$html = file_get_html('https://tw.bid.yahoo.com/booth/Noahshop-生活用品-Y9495104804?page=10&bfe=1');
//選取網頁要的範圍(.item-wrap這個是HTML 標籤 class 的名稱)
$ret = $html-> find('.item-wrap',0);
//顯示出抓取的HTML
echo $ret;
?>

上面執行後會出現網址頁面裡的第一個商品的.item-wrap範圍內的HTML(上面PHP檔怎麼執行這裡不再詳訴,看是要丟瀏覽器還是在終端機執行都可),再來把範圍改成抓取商品標題。

<?php
//先把外掛載進來simple_html_dom.php
include 'simple_html_dom.php';
//讀取網頁資料HTML
$html = file_get_html('https://tw.bid.yahoo.com/booth/Noahshop-生活用品-Y9495104804?page=10&bfe=1');
//選取網頁要的範圍(.item-wrap這個是HTML 標籤 class 的名稱)
$ret = $html-> find('.item-wrap div.item-title a',0);
//顯示出抓取的HTML
echo $ret;
?>

執行上面腳本結果如下:

<a class="item-title-link" href="https://tw.bid.yahoo.com/item/100400086392"> *NOAH*客製化底片膠捲黑相框 含客製化輸出照片 禮物 婚禮 寫真 相框 紀念禮品 幫客印製相片打樣寄送確認後才出圖 </a>

上面就是在”.item-wrap div.item-title a”這個路徑下所得HTML內容,如果要只抓取文字就須在範圍後面加上我想要抓取的類型。

<?php
//先把外掛載進來simple_html_dom.php
include 'simple_html_dom.php';
//讀取網頁資料HTML
$html = file_get_html('https://tw.bid.yahoo.com/booth/Noahshop-生活用品-Y9495104804?page=10&bfe=1');
//選取網頁要的範圍(.item-wrap  div.item-title a這個是HTML 標籤商品標題的路經),後面plaintext是抓取<a>標前內的文字,如果要抓超連結就改成href
$ret = $html-> find('.item-wrap div.item-title a',0)->plaintext;
//顯示出抓取的商品標題
echo $ret;
?>

執行上面腳本結果如下:

 *NOAH*客製化底片膠捲黑相框 含客製化輸出照片 禮物 婚禮 寫真 相框 紀念禮品 幫客印製相片打樣寄送確認後才出圖

這樣抓出到的就是商品標題,沒有帶HTML碼!來解釋釋一下HTML路徑吧,其是跟資料夾檔案路徑很像,例如F:\laragon\www\test。

//下面是HTML的基本結構
<div class="a">
<ul class="b">
<li class="c"><a class="c1" href="#">這是標題一</a></li>
<li class="c"><a class="c2" href="#">這是標題二</a></li>
</ul>
</div>
//如我要取得標題一的文字路徑這樣寫
//div ul li a
//加入CSS的路徑寫法為
//div.a ul.b li.c a
//兩種路徑寫法都可以抓到a裡面的文子

再來˙寫一個迴圈取出整頁的標題,如下:

<?php
//先把外掛載進來simple_html_dom.php
include 'simple_html_dom.php';
//讀取網頁資料HTML
$html = file_get_html('https://tw.bid.yahoo.com/booth/Noahshop-生活用品-Y9495104804?page=10&bfe=1');
//迴圈
foreach ( $html -> find('.item-wrap') as $postns){
//商品標題
    $title = $postns->find('div.item-title a', 0)->plaintext;
    echo $title."\n";
}
?>

執行上面腳本結果如下:

*NOAH*預購 限黑貓宅配  米家飛利浦智睿檯燈二代送轉接頭 檯燈 小米台燈 LED 護眼燈 學生宿舍臥室 折疊閱讀燈
 *NOAH* 預購 小米原廠 防霧霾口罩
 *NOAH*短襪 棉襪 船型襪 獨立包裝 黑白灰 吸汗防臭 清爽透氣另有條紋款 九雙100元彈性可拉至約26-27cm
 *NOAH* 短襪 棉襪 船型襪 獨立包裝 黑白灰 吸汗防臭 清爽透氣另有條紋款 九雙100元彈性可拉至約26-27cm
 *NOAH*OPULA KCL-2033 筆電 電腦 手機 平板 消毒清潔濕巾 廠商直銷 批發 零售(1罐100片)
 *NOAH*小米 米家 隨身風扇 靜音風扇 USB接口 輕巧 口袋小風扇 夏天的好幫手 可插行動電源 藍/白 兩色 全新
 *NOAH*藤條 乾花 無火 香薰 精油 藤條 木瓶 揮發 精油瓶 芳香瓶 唯美禮盒 贈禮有格調 有面子 家用卧室香水
 *NOAH*OPULA KCL-2033 筆電 電腦 手機 平板 消毒清潔濕巾 廠商直銷 批發 零售
..................................................以下省略

這樣就可以把整頁的商品標題給抓取來,要再增加抓取的項目只要再加入要抓取的位置,如價格:

<?php
//先把外掛載進來simple_html_dom.php
include 'simple_html_dom.php';
//讀取網頁資料HTML
$html = file_get_html('https://tw.bid.yahoo.com/booth/Noahshop-生活用品-Y9495104804?page=10&bfe=1');
//迴圈
foreach ( $html -> find('.item-wrap') as $postns){
//商品標題
    $title = $postns->find('div.item-title a', 0)->plaintext;
//商品標題
    $money = $postns -> find('span.number', 0)->plaintext;
    echo $title."\n";
}
?>

執行上面腳本結果如下:

*NOAH*預購 限黑貓宅配  米家飛利浦智睿檯燈二代送轉接頭 檯燈 小米台燈 LED 護眼燈 學生宿舍臥室 折疊閱讀燈
1,250
 *NOAH* 預購 小米原廠 防霧霾口罩
450
 *NOAH*短襪 棉襪 船型襪 獨立包裝 黑白灰 吸汗防臭 清爽透氣另有條紋款 九雙100元彈性可拉至約26-27cm
100
 *NOAH* 短襪 棉襪 船型襪 獨立包裝 黑白灰 吸汗防臭 清爽透氣另有條紋款 九雙100元彈性可拉至約26-27cm
100
 *NOAH*OPULA KCL-2033 筆電 電腦 手機 平板 消毒清潔濕巾 廠商直銷 批發 零售(1罐100片)
146
 *NOAH*小米 米家 隨身風扇 靜音風扇 USB接口 輕巧 口袋小風扇 夏天的好幫手 可插行動電源 藍/白 兩色 全新
110
..................................................以下省略

PHP Simple HTML DOM Parser 這支PHP網頁爬蟲外掛,基本使用上不算難,後面看是要把抓到的資料存成檔案還是直接進資料庫都不是問題,這篇文章希望對新手有所幫助,謝謝觀賞。

最後修改日期: 2020 年 2 月 9 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。