使用简单 HTML DOM 抓取 HTML 并计算子级数

问题描述 投票:0回答:3

我正在尝试从网站收集数据,并想计算另一个元素中元素的数量。定位不同的 DOM 元素效果很好,但由于某种原因,下面示例中的 $count 变量保持为“0”。我可能错过了一些非常愚蠢的东西,但我似乎找不到它。

网站上的HTML如下:

<div id="list_options">
    <div class="list_mtgdef_option pointer">
        <div class="list_mtgdef_foildesc shadow">
        </div>
        <div class="list_mtgdef_stock tooltip">
            <div class="list_mtgdef_stock_left">
                <span class="foil008469_1 block  "></span>
                <span class="foil008469_2 block  transparency_25"></span>
            </div>
            <div class="list_mtgdef_stock_right">
                <span class="008469_8 block  "></span>
                <span class="008469_7 block  "></span>
                <span class="008469_6 block  "></span>
                <span class="008469_5 block  "></span>
                <span class="008469_4 block  "></span>
                <span class="008469_3 block  "></span>
                <span class="008469_2 block  "></span>
                <span class="008469_1 block  "></span>
            </div>
        </div>
    </div>
</div>

这是我正在使用的 php:

$array = array();

foreach($html->find('#list_options .list_mtgdef_option') as $element) {
    $count = 0;

    foreach($element->find('.list_mtgdef_stock', 0)->childNodes(1)->childNodes as $node) {
        if(!($node instanceof \DomText))
            $count++;
    }

    $row = array(
        'stock' => strval($count)
    );

    array_push($array, $row);

}
echo json_encode($array);
php web-scraping dom simple-html-dom
3个回答
3
投票

你可以这样做:

count($element->find('.list_mtgdef_stock > *[2] > *'))
//=>8

2
投票

确实很傻:()

$element->find('.list_mtgdef_stock', 0)->childNodes(1)->childNodes()

1
投票

我用子元素的计数来解决:

$element= $element->find('.list_mtgdef_stock', 0);
count($element->children())
© www.soinside.com 2019 - 2024. All rights reserved.