2014-11-11 3 views
0

Я пытаюсь скрести некоторые данные, с простым HTML DOM Parser, от страницы, которая имеет следующую структуру:Простого 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> 

Я могу легко получить все данные. Моя проблема в том, что я не могу связать изображения с разделителями данных внизу. (Divs не вложенный)

мне нужно, чтобы связать 1.jpg изображения с данными 1, 2 изображения 2.jpg с данными 4 изображений 3.jpg с данными 5,6

Числа divs между изображениями divs являются случайными

Есть ли способ подсчитать количество divs между двумя divs с изображением класса, даже если они не вложены.

Приносим извинения, если вопрос кажется сложным, но я заверяю вас, что вопрос очень прост, если вы внимательно посмотрите на него.

ответ

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 
     ) 

    ) 
) 
+0

Он работал красиво. Ты замечательный – manolish

+0

@manolish рад, что это помогло – Ghost

Смежные вопросы