简单的HTML DOM Parser刮div

时间:2014-11-11 01:18:53

标签: php html parsing dom

我正在尝试使用Simple HTML DOM Parser从具有以下结构的页面中删除一些数据:

    <div class='image'>
        <img class='a' src='1.jpg'>
    </div>
    <div class='data'>
        lorem ipsum 1
   </div>
    <div class='data'>
        lorem ipsum 2
   </div>
    <div class='data'>
        lorem ipsum 3
   </div>

    <div class='image'>
        <img class='a' src='2.jpg'>
    </div>
    <div class='data'>
        lorem ipsum 4
   </div>

    <div class='image'>
       <img class='a' src='3.jpg'>
    </div>
    <div class='data'>
        lorem ipsum 5
   </div>
        <div class='data'>
            lorem ipsum 6
       </div>

我可以轻松获取所有数据。 我的问题是我无法将图像与下面的数据div关联起来。 (Divs没有嵌套)

我需要联想 图像1.jpg与数据1,2和&amp; 3 图像2.jpg与数据4 图像3.jpg与数据5,6

图像div之间的div数是随机的

有没有办法计算两个div与类图像之间的div数,即使它们没有嵌套。

如果问题看起来很复杂,我很抱歉,但如果仔细看一下,我向你保证这个问题非常简单。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用循环(foreach)检查序列。检查div是否有图像类,是否增加了分组键,否则,使用当前键并推送数据。

粗略的例子:

$data = array();
$html = str_get_html($html_markup);
$current_key = 0;
foreach ($html->find('div') as $div) {
    if($div->class == 'image') {
        $current_key++;
        $data[$current_key]['image'] = $div->find('img', 0)->src;
    }

    if($div->class == 'data') {
        $data[$current_key]['data'][] = $div->innertext;
    }
}

echo '<pre>';
print_r($data);

数据应分组如下:

Array
(
    [1] => Array
    (
        [image] => 1.jpg
        [data] => Array
        (
            [0] =>      lorem ipsum 1 
            [1] =>      lorem ipsum 2 
            [2] =>      lorem ipsum 3 
        )
    )

    [2] => Array
    (
        [image] => 2.jpg
        [data] => Array
        (
            [0] =>      lorem ipsum 4 
        )
    )

    [3] => Array
    (
        [image] => 3.jpg
        [data] => Array
        (
            [0] =>      lorem ipsum 5 
            [1] =>      lorem ipsum 6 
        )

    )
)