You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用simple_html_dom提取电商页面SKU时获取错误值的问题求解

你当前拿到错误SKU的核心原因是该站点的SKU属于前端动态渲染内容:curl只能获取页面初始加载的静态HTML源码,此时SKU节点的内容还没有被JavaScript逻辑替换为真实值,浏览器中看到的是JS执行完成后的最终DOM,因此二者结果不一致。另外你之前使用的选择器div#[class="product attribute sku"] div存在语法错误,#为ID选择器标识,匹配class属性不需要加该符号,不过这不是核心问题。

以下是两种可用的实现方案:

方案1:正则匹配静态JS数据(轻量高性能,无需额外工具)

该站点基于Magento2搭建,产品核心数据会提前注入到页面Script标签的全局JSON变量中,无需等待前端渲染,直接从静态源码中匹配对应字段即可,性能最高:

<?php
$user_agent ='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
$curl = curl_init();
$link = "https://www.tradesquare.com.au/milano-decor-eden-gas-lift-bed-with-headboard-platform-storage-dark-grey-fabric-queen-dark-grey.html";
curl_setopt($curl, CURLOPT_URL, $link);
curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_REFERER, $link);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
// 新增Cookie配置,规避站点反爬拦截
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
$str = curl_exec($curl);
curl_close($curl);

// 正则匹配SKU字段,无需引入simple_html_dom
if (preg_match('/"sku"\s*:\s*"([a-zA-Z0-9]+)"/', $str, $matches)) {
    $sku = trim($matches[1]);
    echo $sku;
} else {
    echo "SKU匹配失败";
}
exit;
?>

方案2:无头浏览器模拟渲染(兼容性最强,适合全场景动态站点)

如果后续需要提取其他动态渲染字段,可以用无头浏览器模拟真实浏览器加载逻辑,等JS执行完成后再提取DOM内容,推荐使用chrome-php/chrome库:

  1. 首先通过composer安装依赖:
    composer require chrome-php/chrome
  2. 实现代码:
<?php
require __DIR__ . '/vendor/autoload.php';

use HeadlessChromium\BrowserFactory;

$browserFactory = new BrowserFactory();
$browser = $browserFactory->createBrowser([
    'userAgent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
]);

try {
    $page = $browser->createPage();
    $page->navigate('https://www.tradesquare.com.au/milano-decor-eden-gas-lift-bed-with-headboard-platform-storage-dark-grey-fabric-queen-dark-grey.html')->waitForNavigation();
    // 等待SKU节点渲染完成
    $page->waitForExpression('document.querySelector(\'[itemprop="sku"]\').textContent.length > 0');
    // 提取SKU值
    $sku = $page->evaluate('document.querySelector(\'[itemprop="sku"]\').textContent.trim()')->getReturnValue();
    echo $sku;
} finally {
    $browser->close();
}
?>

该方案获取的内容和浏览器中看到的完全一致,适配所有动态渲染站点,缺点是需要部署Chrome/Chromium运行环境,性能低于正则方案。

内容的提问来源于stack exchange,提问作者Robert-L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:57:03