Как проанализировать содержимое тега p без класса и без идентификатора с помощью парсера SimpleHTMLdom?

это часть html, которую я хочу проанализировать, чтобы получить текст внутри <p> :

<div class="container">
    <h2>title</h2>
    <div class="divIdontNeed"> hi </div>
    <p> I WANT THIS TEXT </p> <====== this is what i want
    <p> i don't want this one </p>
</div>

То, что я сделал, это цикл (потому что html выше находится на нескольких страницах, и я хочу, чтобы все они были в массиве $allTexts):

foreach($html->find('div[class=container]')->find('p',0) as $text){

                    array_push($allTexts, $text->plaintext);
                }

Когда я это делаю, я получаю сообщение об ошибке Fatal error: Call to a member function find() on array in /path/to/MyTextParser.php

Спасибо вам всем


person Sushi    schedule 30.03.2016    source источник
comment
У вас есть несколько div с контейнером класса?   -  person Pekka    schedule 30.03.2016
comment
Под «несколько» я подразумеваю: веб-сайт, который я анализирую, содержит разбиение на страницы, все страницы содержат одну и ту же часть html (с разным содержимым, но с одинаковой структурой)   -  person Sushi    schedule 30.03.2016


Ответы (2)


Вы получаете ошибку, потому что первый find() возвращает массив элементов, а не один.

Вам нужно сделать цикл по результатам этого первого find():

foreach($html->find('div[class=container]') as $element)
{
   foreach ($element->find('p',0) as $text){
   array_push($allTexts, $text->plaintext);
  }
 }
person Pekka    schedule 30.03.2016
comment
Чтобы не быть претенциозным, просто добавьте «foreach» в 3-ю строку, мой друг;) спасибо - person Sushi; 30.03.2016

вы должны выбрать n-й элемент, который вы хотите.

$divObj=$html->find('div.container', 0);

echo $divObj->find('p', 0)->plaintext; //you are choosing only first p tag

echo $divObj->find('p', 1)->plaintext; //you are choosing only second p tag

Если вам нужен текст из всех p элементов div, вам нужно сделать foreach

ИЛИ

вы можете выбрать его как следующего брата div с классом divIdontNeed

$divObj=$html->find('div.divIdontNeed', 0)->next_sibling();

echo $divObj->plaintext;
person Deepa MG    schedule 29.12.2017