Я использую Simple html dom для очистки веб-сайта. Проблема, с которой я столкнулся, заключается в том, что текст помещается вне любого конкретного элемента. Единственный элемент, который, кажется, внутри, – это <div id="content">
.
<div id="content"> <div class="image-wrap"></div> <div class="gallery-container"></div> <h3 class="name">Here is the Heading</h3> All the text I want is located here !!! <p> </p> <div class="snapshot"></div> </div>
Я думаю, что веб-мастер перепутался, и текст действительно должен быть внутри тегов <p>
.
Я пробовал использовать этот код ниже, но он просто не получит текст:
$t = $scrape->find("div#content text",0); if ($t != null){ $text = trim($t->plaintext); }
Я все еще новичок и все еще учился. Может ли кто-нибудь помочь вообще?
Вы почти там … Используйте тестовый цикл для отображения содержимого ваших узлов и найдите индекс требуемого текста. Например:
// Find all texts $texts = $html->find('div#content text'); foreach ($texts as $key => $txt) { // Display text and the parent's tag name echo "<br/>TEXT $key is ", $txt->plaintext, " -- in TAG ", $txt->parent()->tag ; }
Вы обнаружите, что вам следует использовать индекс 4
вместо 0
:
$scrape->find("div#content text",4);
И если ваш текст не всегда имеет один и тот же индекс, но вы знаете, например, что он следует за заголовком h3
, тогда вы можете использовать что-то вроде:
foreach ($texts as $key => $txt) { // Locate the h3 heading if ($txt->parent()->tag == 'h3') { // Grab the next index content from $texts echo $texts[$key+1]->plaintext; // Stop break; } }