【问题标题】:How do I scrape and combine multiple application/ld+json tags?如何抓取和组合多个 application/ld+json 标签?
【发布时间】:2021-02-25 20:14:26
【问题描述】:

我正在编写一个脚本来从提交的(外部)URL 中提取元数据。我发现了一篇非常有用的帖子,它让我完成了 90% 的工作,但是它假设只有一个相关的脚本标签,我需要解析具有多个脚本标签的页面。

如何修改下面的语句,以便将所有匹配的 json 脚本标签组合成一个 json 块?

$xp = new domxpath($d);
$jsonScripts = $xp->query( '//script[@type="application/ld+json"]' );
$json = trim( $jsonScripts->item(0)->nodeValue );

// decode the JSON string we find into a associative array
$data = json_decode( $json, true );

【问题讨论】:

  • 您可以只使用foreach 而不是$jsonScripts

标签: php json parsing


【解决方案1】:

我不是 100% 不测试代码,但是$jsonScripts 会包含多个项目,如果有多个项目,可以使用 length 属性获得这些项目的总数。

要遍历所有这些,请使用简单的for 循环来获取每个:

...
$jsonScripts = $xp->query( '//script[@type="application/ld+json"]' );
$json = '';
for ($i = 0; $i < $jsonScripts->length; $i++) {
    $json .= trim($jsonScripts->item($i)->nodeValue );
}
...

这将简单地将每个脚本节点的内容连接到$json 变量上。我不确定你是想用分隔符还是其他东西来分隔它们。

您的代码之前使用的位置:

$json = trim( $jsonScripts->item(0)->nodeValue );

这只是获取 first 元素。我建议使用的代码:

$json .= trim($jsonScripts->item($i)->nodeValue);

这将连接$ith 元素,因此应输出以0th 开头的所有元素。

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 2018-06-25
    • 1970-01-01
    • 2020-06-18
    • 2016-05-21
    • 2020-04-06
    • 1970-01-01
    • 2019-10-12
    • 2023-02-11
    相关资源
    最近更新 更多