您好我在使用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';
}
}
答案 0 :(得分:3)
首先检查The DomCrawler Component文档。 filter
方法返回已过滤的节点列表,因此通过调用->filter('div.icon3d')
返回的值将列出具有div
类的所有icon3d
元素。
首先,您需要查找所有div
元素,循环显示它们,并根据3D
css类存在,将2D
或icon3d
添加到数组中。
$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')
答案 1 :(得分:0)
我明白了。这是我使用的代码。我确信有一种更清洁的方式。
$divs = $crawler->filter('#schedule li a')->each(function($node){
if ($node->children()->last()->attr('class') == 'icon3d') {
return '3D';
}else{
return '2D';
}
});