在电商平台上,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("//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("//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 详细信息的功能。希望这个示例对你有所帮助!