1

嗨,我遇到了 DomCrawler 的一个小问题。我正在抓取一个页面,它有div一个.icon3d. 我想浏览页面,对于每个具有该类的 div,我将向"3D"数组添加一个项目,而没有它的每个 div 我将添加一个"2D"项目。这是我到目前为止的代码。

for ($i=0; $i < 10; $i++) { 
    $divs =  $crawler->filter('div.icon3d');
        if(count($divs)){
            $type[] = '3D';
        }else{
            $type[] = '2D';
        }
    }
4

2 回答 2

4

首先检查DomCrawler 组件文档。filter方法返回过滤的节点列表,因此通过调用->filter('div.icon3d')返回值将是所有div具有icon3d类的元素的列表。

首先,您需要找到所有div元素,遍历它们并根据css 类的存在添加其中一个3D或到数组。2Dicon3d

$divs = $crawler->filter('div');
foreach ($divs as $node) {
    $type[] = (false !== strpos($node->getAttribute('class'), 'icon3d')) ? '3D' : '2D';
}

更新

$crawler->filter('a')->each(function(Crawler $a) {
    $div = $a->filter('div');
    // Div exists
    if ($div->count()) {

    }
});

获取爬虫节点类使用

$div->getNode(0)->getAttribute('class')
于 2015-07-09T06:20:26.303 回答
0

我想到了。这是我使用的代码。我敢肯定有一种更清洁的方法。

$divs = $crawler->filter('#schedule li a')->each(function($node){
    if ($node->children()->last()->attr('class') == 'icon3d') {
        return '3D';
    }else{
        return '2D';
    }
});
于 2015-07-09T13:17:45.787 回答