【问题标题】:Simple HTML DOM Parser scrape divs简单的 HTML DOM 解析器抓取 div
【发布时间】:2015-01-07 11:22:58
【问题描述】:

我正在尝试使用 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、2 和 3 的图像 1.jpg 图像 2.jpg 与数据 4 图像 3.jpg 与数据 5,6

图片div之间的div个数是随机的

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

如果这个问题看起来很复杂,我深表歉意,但我向你保证,如果你仔细看,这个问题很简单。

【问题讨论】:

    标签: php html parsing dom


    【解决方案1】:

    您可以尝试使用循环 (foreach) 来检查序列。检查div是否有图片类,如果有增加分组key,否则使用当前key,往里面推数据。

    粗略的例子:

    $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 
            )
    
        )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 2014-03-18
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 2015-07-25
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多