網頁資料擷取是後端開發常見需求,核心在於解析 DOM 樹並精準定位目標節點。本文整理四種成熟、易用的 PHP 爬蟲方案,若熟悉 jQuery 選擇器語法,上手極快。
專案地址: Ganon 官方頁面
文檔: 使用手冊
Ganon 採用類似 jQuery 的選擇器語法,代碼極為簡潔。以下示範抓取首頁所有 class="focus" 的 <div> 元素並輸出 class 值:
<?php
include 'ganon.php';
$html = file_get_dom('https://www.ido321.com/');
foreach($html('div[class="focus"]') as $element) {
echo $element->class, "<br>\n";
}
?>
專案地址: phpQuery 官方頁面
文檔: 詳細手冊
phpQuery 完整移植了 jQuery 核心 API,對前端開發者極其友好。示例:抓取首頁所有 <article> 標籤下的 <h2> 內容:
<?php
include 'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('https://www.ido321.com/');
$artlist = pq("article");
foreach($artlist as $title){
echo pq($title)->find('h2')->html()."<br/>";
}
?>
專案地址: SourceForge 頁面
文檔: 使用指南
支援 URL 與檔案直接建立 DOM 物件,語法直觀。示例:抓取首頁所有超連結:
<?php
include 'simple_html_dom.php';
$html = file_get_html('https://www.ido321.com/');
foreach($html->find('a') as $element)
echo $element->href . '<br>';
?>
專案地址: Snoopy 官方頁面
Snoopy 不僅能抓取內容,還支援表單提交、Cookie 處理、重定向追蹤等瀏覽器行為。示例:獲取首頁完整 HTML:
<?php
include("Snoopy.class.php");
$url = "https://www.ido321.com";
$snoopy = new Snoopy;
$snoopy->fetch($url);
echo $snoopy->results;
// 進階用法:
// echo $snoopy->fetchtext; // 純文本內容
// echo $snoopy->fetchlinks($url); // 所有連結
// $snoopy->fetchform; // 表單資訊
?>
若具備扎實的網路協議與正則表達式功力,可使用 fsockopen、cURL 或 stream_context_create 手寫爬蟲,完全掌控請求細節。但需自行處理編碼、重定向、壓縮、反爬機制等複雜問題,維護成本極高,非必要不建議採用。
配合 strip_tags() 去除 HTML 標籤,結合中文分詞庫(如 SCWS、Jieba PHP)可實現關鍵字提取與自動摘要,供站內搜尋或 SEO 使用。