DomCrawler在特定元素之后获取元素内容

时间:2019-03-05 14:22:52

标签: php laravel web-scraping domcrawler

我正在尝试获取紧随另一个元素之后的元素的内容。这是一些示例代码:

<header>2010</header>
<div>
    <a href="">Some data</a>
    <a href="">Some data</a>
</div>
<header>2011</header>
<div>
    <a href="">Some data</a>
    <a href="">Some data</a>
</div>

我需要按年份对数据进行排序,并且尝试了一些方法,但是对于2010年,它需要所有年份的数据。

$crawler->filter('header')->each(function(Crawler $c) {
$year = $c->text();
$next = $c->nextAll();
$next->filter('div a')->each(function($node){
    $node->text();
});
});

如何在两个标头之间获得所有div a后停止它?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您只能从nextAll进入第一个节点,并且由于第一项是div,因此仅在其中过滤a

$crawler->filter('header')->each(function(Crawler $c) {
    $year = $c->text();
    dump($year);
    $next = $c->nextAll()->first();
    $next->filter('a')->each(function($node){
        dump($node->text());
    });
});