在電商平臺上,SKU(Stock Keeping Unit)是商品庫存進出計量的基本單元。對于淘寶商品來說,SKU 信息通常包括不同的規格、價格、庫存等詳細信息。通過 PHP 爬蟲技術,我們可以獲取淘寶商品的 SKU 詳細信息,從而更好地分析商品數據或進行其他業務操作。以下將詳細介紹如何使用 PHP 實現這一功能。
一、準備工作
1. 安裝必要的 PHP 擴展
確保你的 PHP 環境中已經安裝了 cURL 擴展,用于發起 HTTP 請求。此外,還需要安裝 DOMDocument 和 DOMXPath 擴展,用于解析 HTML。
2. 了解淘寶商品頁面結構
通過瀏覽器的開發者工具(按 F12 打開)查看淘寶商品詳情頁的 HTML 結構,找到 SKU 信息所在的標簽和類名。通常,SKU 信息可能包含在 <div> 或 <ul> 標簽中。
二、PHP 爬蟲代碼實現
以下是使用 PHP 實現獲取淘寶商品 SKU 詳細信息的代碼示例。
1. 發起請求
使用 cURL 向淘寶商品詳情頁發起請求,并獲取頁面的 HTML 內容。
php
<?php
function get_page($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3');
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
?>
2. 解析 HTML
使用 DOMDocument 和 DOMXPath 解析獲取到的 HTML 內容,并提取 SKU 詳細信息。
php
<?php
function parse_sku_details($html) {
$doc = new DOMDocument();
@$doc->loadHTML($html); // 使用 @ 抑制警告
$xpath = new DOMXPath($doc);
// 假設 SKU 信息在特定的類名中
$sku_list = $xpath->query("http://ul[@class='sku-list']//li");
$sku_details = [];
foreach ($sku_list as $sku) {
$sku_name = $xpath->query(".//span[@class='sku-name']", $sku)->item(0)->nodeValue;
$sku_price = $xpath->query(".//span[@class='sku-price']", $sku)->item(0)->nodeValue;
$sku_stock = $xpath->query(".//span[@class='sku-stock']", $sku)->item(0)->nodeValue;
$sku_details[] = [
'name' => $sku_name,
'price' => $sku_price,
'stock' => $sku_stock
];
}
return $sku_details;
}
?>
3. 獲取并解析 SKU 信息
將上述兩個函數組合起來,實現獲取并解析 SKU 信息的功能。
php
<?php
function get_sku_details($product_url) {
$html = get_page($product_url);
if ($html) {
$sku_details = parse_sku_details($html);
return $sku_details;
} else {
echo "請求失敗,請檢查網絡或商品鏈接。\n";
return [];
}
}
function display_sku_details($sku_details) {
if (empty($sku_details)) {
echo "未找到 SKU 信息。\n";
return;
}
foreach ($sku_details as $sku) {
echo "SKU 名稱: " . $sku['name'] . "\n";
echo "SKU 價格: " . $sku['price'] . "\n";
echo "SKU 庫存: " . $sku['stock'] . "\n";
echo "------------------------\n";
}
}
?>
4. 主程序
在主程序中調用上述函數,獲取并展示 SKU 信息。
php
<?php
if (__FILE__ == __FILE__) {
$product_url = readline("請輸入淘寶商品鏈接:");
$sku_details = get_sku_details($product_url);
display_sku_details($sku_details);
}
?>
三、完整代碼示例
將上述代碼片段組合起來,形成一個完整的 PHP 腳本:
php
<?php
function get_page($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3');
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
function parse_sku_details($html) {
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$sku_list = $xpath->query("http://ul[@class='sku-list']//li");
$sku_details = [];
foreach ($sku_list as $sku) {
$sku_name = $xpath->query(".//span[@class='sku-name']", $sku)->item(0)->nodeValue;
$sku_price = $xpath->query(".//span[@class='sku-price']", $sku)->item(0)->nodeValue;
$sku_stock = $xpath->query(".//span[@class='sku-stock']", $sku)->item(0)->nodeValue;
$sku_details[] = [
'name' => $sku_name,
'price' => $sku_price,
'stock' => $sku_stock
];
}
return $sku_details;
}
function get_sku_details($product_url) {
$html = get_page($product_url);
if ($html) {
$sku_details = parse_sku_details($html);
return $sku_details;
} else {
echo "請求失敗,請檢查網絡或商品鏈接。\n";
return [];
}
}
function display_sku_details($sku_details) {
if (empty($sku_details)) {
echo "未找到 SKU 信息。\n";
return;
}
foreach ($sku_details as $sku) {
echo "SKU 名稱: " . $sku['name'] . "\n";
echo "SKU 價格: " . $sku['price'] . "\n";
echo "SKU 庫存: " . $sku['stock'] . "\n";
echo "------------------------\n";
}
}
if (__FILE__ == __FILE__) {
$product_url = readline("請輸入淘寶商品鏈接:");
$sku_details = get_sku_details($product_url);
display_sku_details($sku_details);
}
?>
四、代碼解釋
- get_page 函數:使用 cURL 發起 HTTP 請求,獲取目標頁面的 HTML 內容。設置了 User-Agent,以模擬瀏覽器行為,避免被淘寶識別為爬蟲。
- parse_sku_details 函數:使用 DOMDocument 加載 HTML 內容。使用 DOMXPath 查詢 SKU 信息所在的 HTML 元素。提取 SKU 的名稱、價格和庫存等信息,并存儲到數組中。
- get_sku_details 函數:調用 get_page 函數獲取頁面 HTML。調用 parse_sku_details 函數解析 SKU 信息。
- display_sku_details 函數:遍歷 SKU 信息數組,并打印每個 SKU 的詳細信息。
五、注意事項
- 反爬機制:淘寶可能會對爬蟲進行限制,例如限制 IP 訪問頻率、檢測異常請求等。如果遇到這種情況,可以嘗試以下方法:使用代理服務器(如代理 IP 池)。增加請求間隔時間(使用 sleep())。模擬更多瀏覽器行為(如設置更多請求頭)。
- 動態加載內容:淘寶的部分內容可能是通過 JavaScript 動態加載的。如果發現 cURL 獲取到的 HTML 內容中缺少某些數據,可以考慮使用 Selenium(PHP 版本)來模擬瀏覽器操作。
- 數據存儲:如果需要將爬取到的 SKU 數據存儲起來,可以將其保存到文件(如 CSV、JSON)或數據庫中。
六、示例輸出
假設輸入的淘寶商品鏈接是某個具體商品的頁面,運行程序后可能輸出如下:
復制
請輸入淘寶商品鏈接:https://detail.tmall.com/item.htm?id=1234567890
SKU 名稱: 顏色:紅色
SKU 價格: ¥5499.00
SKU 庫存: 100
------------------------
SKU 名稱: 顏色:黑色
SKU 價格: ¥5499.00
SKU 庫存: 150
------------------------
...
通過上述步驟和代碼,你可以使用 PHP 實現獲取淘寶商品 SKU 詳細信息的功能。希望這個示例對你有所幫助!