【发布时间】:2017-05-11 07:18:01
【问题描述】:
用于解析的示例 HTML 5:
<div id="orderDetails">
<div> ... any number of blocks with unnecessary stuff ... </div>
<div>Label for important info</div>
<table> ... some other block type ... </table>
<div>Some very important info here</div>
<div> ... any number of blocks with unnecessary stuff ... </div>
</div>
我的 PHP 代码如下所示:
$crawler = new \Symfony\Component\DomCrawler\Crawler($html);
$label = $crawler->filter('#orderDetails div:contains("Label for important info")');
$info = $label->parent()->next('div');
assert('Some very important info here' === $info->text(), 'Important info must be grabbed from HTML');
但不幸的是爬虫没有方法parent和next。但是..它有parents,它给了我所有个父节点==我不能区分的所有div。
所以在这种情况下我有两个问题:
- 如何获取当前节点的父节点?不是所有节点,而是“实际”一个!
- 如何使用
next/prev的一些类似物水平遍历dom?
谢谢。
【问题讨论】:
-
我注意到 the API mentions
parents()“返回当前选择的父母”。不知道对你有没有帮助? -
是的,我看到了,但我只需要“当前父节点,而不是父节点s”和“只有一个下一个节点,而不是 全部他们”。但是,在阅读了源代码(旨在重新发明轮子)之后,我发现它只是方法的名称非常令人困惑(请参阅下面的答案)。
标签: php html dom web-crawler symfony