全部
常见问题
产品动态
精选推荐

利用 PHP 爬虫获取淘宝商品 SKU 详细信息

管理 管理 编辑 删除

在电商平台上,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);
}
?>

四、代码解释

  1. get_page 函数:使用 cURL 发起 HTTP 请求,获取目标页面的 HTML 内容。设置了 User-Agent,以模拟浏览器行为,避免被淘宝识别为爬虫。
  2. parse_sku_details 函数:使用 DOMDocument 加载 HTML 内容。使用 DOMXPath 查询 SKU 信息所在的 HTML 元素。提取 SKU 的名称、价格和库存等信息,并存储到数组中。
  3. get_sku_details 函数:调用 get_page 函数获取页面 HTML。调用 parse_sku_details 函数解析 SKU 信息。
  4. display_sku_details 函数:遍历 SKU 信息数组,并打印每个 SKU 的详细信息。

五、注意事项

  1. 反爬机制:淘宝可能会对爬虫进行限制,例如限制 IP 访问频率、检测异常请求等。如果遇到这种情况,可以尝试以下方法:使用代理服务器(如代理 IP 池)。增加请求间隔时间(使用 sleep())。模拟更多浏览器行为(如设置更多请求头)。
  2. 动态加载内容:淘宝的部分内容可能是通过 JavaScript 动态加载的。如果发现 cURL 获取到的 HTML 内容中缺少某些数据,可以考虑使用 Selenium(PHP 版本)来模拟浏览器操作。
  3. 数据存储:如果需要将爬取到的 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 详细信息的功能。希望这个示例对你有所帮助!


请登录后查看

one-Jason 最后编辑于2025-04-07 16:09:48

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}}
沙发 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
145
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服