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

如何使用Goutte筛选仅含@type:"Product"的JSON-LD数据?

如何在Goutte中筛选@type为"Product"的JSON-LD条目?

当然可以!你只需要在遍历JSON-LD节点的流程里,先把节点内的JSON内容解析成PHP数组,再检查@type字段是否匹配"Product",之后再执行后续处理逻辑就行。

下面是修改后的完整代码示例:

$client = new Client();
$url = "https://www.xxxx.com";
$crawler = $client->request('GET', $url);

$crawler->filterXPath('//*[@type="application/ld+json"]')->each(function ($node) {
    // 提取节点内的JSON文本并解析为关联数组
    $jsonLd = json_decode($node->text(), true);
    
    // 处理JSON解析失败的情况
    if (json_last_error() !== JSON_ERROR_NONE) {
        return; // 解析失败直接跳过当前节点
    }

    // 处理单个对象格式的JSON-LD
    if (isset($jsonLd['@type']) && $jsonLd['@type'] === 'Product') {
        // 在这里执行你的后续处理逻辑
        var_dump($jsonLd);
    }

    // 处理数组格式的JSON-LD(包含多个条目)
    if (is_array($jsonLd)) {
        foreach ($jsonLd as $item) {
            if (isset($item['@type']) && $item['@type'] === 'Product') {
                // 在这里执行你的后续处理逻辑
                var_dump($item);
            }
        }
    }
});

关键细节说明:

  • 解析JSON文本:用json_decode($node->text(), true)将节点内的JSON字符串转成PHP关联数组,方便后续字段判断。
  • 错误防护:加入json_last_error()检查,避免无效JSON导致脚本异常中断。
  • 兼容两种结构:网页中的JSON-LD可能是单个对象,也可能是包含多个对象的数组,同时处理这两种情况能确保不会漏掉符合条件的条目。

这样就能精准锁定@type为Product的JSON-LD条目,只对这些内容执行后续操作啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:09:13