Простой HTML DOM — пропустить определенный элемент

#php #web-scraping #simple-html-dom

#php #очистка веб-страниц #простой-html-dom

Вопрос:

Я хочу игнорировать содержимое, <a> которое находится внутри <h3> элемента, и получить только текст <h3> .

 <h3>
144.000 TL
<a class="emlak-endeksi-link trackClick trackId_emlak-endeksi-link" id="emlakEndeksiLink">
Emlak Endeksi</a>
</h3>
  

Пример: хочу получить только 144.000 TL и игнорировать (Emlak Endeksi)

 foreach ($html1->find('div.classifiedInfo h3') as $price) {
    $ilanlar['price'] = $price->plaintext;
}
  

Ответ №1:

не очень знаком с простым html dom, но … выбор текстового узла через http://simplehtmldom.sourceforge.net/manual.htm#frag_find_textcomment должно помочь?

 $ilanlar['price'] = $price->find('text', 0)->plaintext;
  

Комментарии:

1. большое вам спасибо, @jakumi, у меня это сработало, и это самый короткий способ сделать это

Ответ №2:

Возможно, удаление <a> тега помогает:

 $str = <<<str
<h3>
144.000 TL
<a class="emlak-endeksi-link trackClick trackId_emlak-endeksi-link" id="emlakEndeksiLink">
Emlak Endeksi</a>
</h3>
str;

$html = str_get_html($str);

// Find first <h3>
$h3 = $html->find('h3', 0);

// Find first <a> inside the <h3>, or use $h3->find('a') to find all of them
$a = $h3->find('a', 0);

// Remove <a> tag
$a->outertext = '';

// Output: "144.000 TL"
print trim($h3->innertext);
  

Ответ №3:

Вы можете сделать это с помощью регулярного выражения.

 preg_match_all('<h3>([^n]*n ) <a([^n]*n ) </h3>', $content, $output);
echo $output[1];
  

https://regex101.com/r/qM5Nlk/1