@doriulbool

Как спарсить тег с плавающим расположением?

Использую PHP Simple HTML DOM Parser для получения информации со страницы. Не могу спарсить содержимое тегов, так как у них нет четкого расположения. Он может идти вторым, может быть пятым, а может быть и первым, единственное за что можно зацепиться, так это его расположение после следующей конструкции:
<p class="oposit part1 part2">Примечание</p>


// Пример 1
<div class=primer>
<p class="oposit part1 part2">Примечание</p>	
<div class="halfM indPar">Текст, который мне нужен</div>
<div class="halfM indPar">Текст, который мне также нужен</div>
</div>

// Пример 2
<div class=primer>
<p class="oposit part1 part2">Наименования</p>	
<div class="halfM indPar">Текст, который мне не нужен</div>
<div class="halfM indPar">Текст, который мне также не нужен</div>
<p class="oposit part1 part2">Примечание</p>
<div class="halfM indPar">Текст, который мне нужен</div>
<div class="halfM indPar">Текст, который мне также нужен</div>
</div>

// Пример 3
<div class=primer>
<p class="oposit part1 part2">Заметка</p>	
<div class="halfM indPar">Текст, который мне не нужен</div>
<div class="halfM indPar">Текст, который мне также не нужен</div>
<p class="oposit part1 part2">Наименования</p>	
<div class="halfM indPar">Текст, который мне не нужен</div>
<div class="halfM indPar">Текст, который мне также не нужен</div>
<p class="oposit part1 part2">Примечание</p>
<div class="halfM indPar">Текст, который мне нужен</div>
<div class="halfM indPar">Текст, который мне также нужен</div>


Можно ли, как-нибудь, например, с помощью регулярки, указать парсеру, на расположение необходимых тегов?
Если есть другой способ решить задачу, прошу предложить его.
  • Вопрос задан
  • 187 просмотров
Решения вопроса 2
nelolka
@nelolka
foreach($html->find('.primer p[class=oposit part1 part2]') as $el) {
if ($el->innertext=='Примечание')  echo $el->next_sibling();
}
Ответ написан
Комментировать
@nirvimel
PHP Simple HTML DOM Parser тут бессилен.
А вот XPath легко решает проблему:
//div[@class='primer']/p[@class='oposit part1 part2' and text()='Примечание']/following-sibling::div[@class='halfM indPar']/text()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Можно и регуляркой спарсить. regex101.com - в помощь для отладки выражений.
Ответ написан
Комментировать
@Atllantis
Не вижу абсолютно никакой проблемы.
Какой тег и как вы парсите, раз не можете вытянуть его да же из дочернего элемента (или откуда там его надо вытащить...)?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы