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

如何获取Lidl动态加载商品页面的商品URL?

解决动态加载页面的商品URL获取问题

因为目标页面的商品是通过JavaScript动态渲染的,file_get_contents只能获取原始静态HTML,所以拿不到动态加载的内容。给你两个可行的解决方案:

方案1:直接调用商品数据的API接口

动态页面的商品数据通常来自后端API,你可以通过浏览器开发者工具找到这个接口:

  1. 打开目标页面,按F12打开开发者工具,切换到「Network」面板
  2. 刷新页面,过滤「XHR」或「Fetch」类型的请求,找到返回商品列表的API(通常返回JSON格式)
  3. 复制该API的请求URL和必要的请求头(比如User-Agent、Referer等,有些接口会校验这些)
  4. 用PHP直接请求这个API,解析JSON数据提取商品URL

示例代码(假设找到的API是对应商品列表的接口):

$apiUrl = '你找到的API接口URL';
$options = [
    'http' => [
        'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36\r\n"
    ]
];
$context = stream_context_create($options);
$jsonData = file_get_contents($apiUrl, false, $context);

if ($jsonData) {
    $products = json_decode($jsonData, true);
    // 根据API返回的实际结构调整提取逻辑
    foreach ($products['items'] as $product) {
        echo $product['pdpUrl'] . "\n";
    }
} else {
    die('请求API失败');
}

方案2:使用无头浏览器渲染页面

用可以执行JavaScript的无头浏览器(比如Chrome的无头模式)加载页面,等JS渲染完成后再提取内容。可以用PHP的第三方库spatie/browsershot实现:

  1. 先安装依赖:需要安装Node.js、Puppeteer,再通过Composer安装spatie/browsershot
  2. 编写代码渲染页面并提取内容:

示例代码:

require 'vendor/autoload.php';

use Spatie\Browsershot\Browsershot;

// 渲染页面并获取JS执行后的完整HTML
$html = Browsershot::url('https://www.lidl.ch/c/de-CH/wochenaktion/a10041837?channel=store&tabCode=Current_Sales_Week')
    ->waitUntilNetworkIdle() // 等待网络请求完成,确保商品加载完毕
    ->bodyHtml();

// 解析渲染后的HTML
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors(false);
$xpath = new DOMXPath($dom);

// 查询所有商品链接并输出
$links = $xpath->query("//a[@class='grid-box__pdp-link']");
foreach ($links as $link) {
    echo $link->getAttribute('href') . "\n";
}

注意:使用无头浏览器需要服务器环境支持Node.js和Puppeteer,并且可能需要配置相应的权限和资源限制。

内容的提问来源于stack exchange,提问作者xRay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:12:22