【发布时间】:2020-04-17 11:14:30
【问题描述】:
我正在使用简单的 html dom 来解析一个链接,该链接包含两个 type=application/ld+json 的脚本标签。
目标网站结构如下,
// tag that I want to parse
<script type="application/ld+json">
Some JSON Data
</script>
// tag that I **do not want** to parse
<script type="application/ld+json">
Some JSON Data
</script>
现在正如我上面展示的,我只想解析第一个里面的数据,为此我使用以下代码
foreach($html->find('script[type="application/ld+json"]',0) as $name)
{
echo $name->innertext;
}
当我试图通过在 find() 函数中指定“0”来提取第一次出现的 时,这给了我以下错误。
Trying to get property of non-object in C:\xampp\htdocs\htmldom\example\example_basic_selector.php on line 14
任何人都知道我做错了什么或者我该如何解决这个问题?谢谢
【问题讨论】:
-
那么您是说没有
,0,它可以工作并向您显示这两个脚本元素的内部文本?如果不是,那么这意味着您的选择器与开始的元素不匹配。 -
@CBroe 完全正确。如果我不使用“0”或其他任何东西,它会显示来自两个脚本标签的数据。
-
我想如果您只要求返回一个特定元素,那么尝试 循环 是错误的。
find('foo')返回一个数组,find('foo', 0)返回一个特定元素。$script = $html->find('script[type="application/ld+json"]',0); echo $script->innertext;能满足您的需求吗? -
我应该告诉你var_dump的结果还是试试你刚才贴的上面的代码?
-
Nigel 的回答已经证实了我的怀疑,所以只需使用他们的代码,它应该可以工作。
标签: php json parsing web-scraping simple-html-dom