在電商平臺(tái)上,SKU(Stock Keeping Unit)是商品庫(kù)存進(jìn)出計(jì)量的基本單元。對(duì)于淘寶商品來(lái)說(shuō),SKU 信息通常包括不同的規(guī)格、價(jià)格、庫(kù)存等詳細(xì)信息。通過(guò) PHP 爬蟲(chóng)技術(shù),我們可以獲取淘寶商品的 SKU 詳細(xì)信息,從而更好地分析商品數(shù)據(jù)或進(jìn)行其他業(yè)務(wù)操作。以下將詳細(xì)介紹如何使用 PHP 實(shí)現(xiàn)這一功能。
一、準(zhǔn)備工作
1. 安裝必要的 PHP 擴(kuò)展
確保你的 PHP 環(huán)境中已經(jīng)安裝了 cURL 擴(kuò)展,用于發(fā)起 HTTP 請(qǐng)求。此外,還需要安裝 DOMDocument 和 DOMXPath 擴(kuò)展,用于解析 HTML。
2. 了解淘寶商品頁(yè)面結(jié)構(gòu)
通過(guò)瀏覽器的開(kāi)發(fā)者工具(按 F12 打開(kāi))查看淘寶商品詳情頁(yè)的 HTML 結(jié)構(gòu),找到 SKU 信息所在的標(biāo)簽和類名。通常,SKU 信息可能包含在 <div> 或 <ul> 標(biāo)簽中。
二、PHP 爬蟲(chóng)代碼實(shí)現(xiàn)
以下是使用 PHP 實(shí)現(xiàn)獲取淘寶商品 SKU 詳細(xì)信息的代碼示例。
1. 發(fā)起請(qǐng)求
使用 cURL 向淘寶商品詳情頁(yè)發(fā)起請(qǐng)求,并獲取頁(yè)面的 HTML 內(nèi)容。
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 內(nèi)容,并提取 SKU 詳細(xì)信息。
php
<?php
function parse_sku_details($html) {
$doc = new DOMDocument();
@$doc->loadHTML($html); // 使用 @ 抑制警告
$xpath = new DOMXPath($doc);
// 假設(shè) 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 信息
將上述兩個(gè)函數(shù)組合起來(lái),實(shí)現(xiàn)獲取并解析 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 "請(qǐng)求失敗,請(qǐng)檢查網(wǎng)絡(luò)或商品鏈接。\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 價(jià)格: " . $sku['price'] . "\n";
echo "SKU 庫(kù)存: " . $sku['stock'] . "\n";
echo "------------------------\n";
}
}
?>
4. 主程序
在主程序中調(diào)用上述函數(shù),獲取并展示 SKU 信息。
php
<?php
if (__FILE__ == __FILE__) {
$product_url = readline("請(qǐng)輸入淘寶商品鏈接:");
$sku_details = get_sku_details($product_url);
display_sku_details($sku_details);
}
?>
三、完整代碼示例
將上述代碼片段組合起來(lái),形成一個(gè)完整的 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 "請(qǐng)求失敗,請(qǐng)檢查網(wǎng)絡(luò)或商品鏈接。\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 價(jià)格: " . $sku['price'] . "\n";
echo "SKU 庫(kù)存: " . $sku['stock'] . "\n";
echo "------------------------\n";
}
}
if (__FILE__ == __FILE__) {
$product_url = readline("請(qǐng)輸入淘寶商品鏈接:");
$sku_details = get_sku_details($product_url);
display_sku_details($sku_details);
}
?>
四、代碼解釋
- get_page 函數(shù):使用 cURL 發(fā)起 HTTP 請(qǐng)求,獲取目標(biāo)頁(yè)面的 HTML 內(nèi)容。設(shè)置了 User-Agent,以模擬瀏覽器行為,避免被淘寶識(shí)別為爬蟲(chóng)。
- parse_sku_details 函數(shù):使用 DOMDocument 加載 HTML 內(nèi)容。使用 DOMXPath 查詢 SKU 信息所在的 HTML 元素。提取 SKU 的名稱、價(jià)格和庫(kù)存等信息,并存儲(chǔ)到數(shù)組中。
- get_sku_details 函數(shù):調(diào)用 get_page 函數(shù)獲取頁(yè)面 HTML。調(diào)用 parse_sku_details 函數(shù)解析 SKU 信息。
- display_sku_details 函數(shù):遍歷 SKU 信息數(shù)組,并打印每個(gè) SKU 的詳細(xì)信息。
五、注意事項(xiàng)
- 反爬機(jī)制:淘寶可能會(huì)對(duì)爬蟲(chóng)進(jìn)行限制,例如限制 IP 訪問(wèn)頻率、檢測(cè)異常請(qǐng)求等。如果遇到這種情況,可以嘗試以下方法:使用代理服務(wù)器(如代理 IP 池)。增加請(qǐng)求間隔時(shí)間(使用 sleep())。模擬更多瀏覽器行為(如設(shè)置更多請(qǐng)求頭)。
- 動(dòng)態(tài)加載內(nèi)容:淘寶的部分內(nèi)容可能是通過(guò) JavaScript 動(dòng)態(tài)加載的。如果發(fā)現(xiàn) cURL 獲取到的 HTML 內(nèi)容中缺少某些數(shù)據(jù),可以考慮使用 Selenium(PHP 版本)來(lái)模擬瀏覽器操作。
- 數(shù)據(jù)存儲(chǔ):如果需要將爬取到的 SKU 數(shù)據(jù)存儲(chǔ)起來(lái),可以將其保存到文件(如 CSV、JSON)或數(shù)據(jù)庫(kù)中。
六、示例輸出
假設(shè)輸入的淘寶商品鏈接是某個(gè)具體商品的頁(yè)面,運(yùn)行程序后可能輸出如下:
復(fù)制
請(qǐng)輸入淘寶商品鏈接:https://detail.tmall.com/item.htm?id=1234567890
SKU 名稱: 顏色:紅色
SKU 價(jià)格: ¥5499.00
SKU 庫(kù)存: 100
------------------------
SKU 名稱: 顏色:黑色
SKU 價(jià)格: ¥5499.00
SKU 庫(kù)存: 150
------------------------
...
通過(guò)上述步驟和代碼,你可以使用 PHP 實(shí)現(xiàn)獲取淘寶商品 SKU 詳細(xì)信息的功能。希望這個(gè)示例對(duì)你有所幫助!