Подтвердить что ты не робот

Разбирайте HTML с PHP HTML DOMDocument

Я пытался сделать это с помощью "getElementsByTagName", но он не работал, я новичок в использовании DOMDocument для синтаксического анализа HTML, поскольку я использовал регулярное выражение до вчерашнего дня, некоторые виды фокусов здесь говорили мне, что DOMEDocument будет лучше для работы, поэтому я даю ему попробовать:)

Я долгое время искал Google, но искал некоторые объяснения, но не нашел ничего, что помогло (не с классом в любом случае)

Итак, я хочу захватить "Capture this text 1" и "Capture this text 2" и т.д.

Не выглядит тяжело, но я не могу понять: (

<div class="main">
    <div class="text">
    Capture this text 1
    </div>
</div>

<div class="main">
    <div class="text">
    Capture this text 2
    </div>
</div>
4b9b3361

Ответ 1

Если вы хотите получить:

  • Текст
  • что внутри тега <div> с class="text"
  • а именно, внутри <div> с class="main"

Я бы сказал, что самый простой способ - не использовать DOMDocument::getElementsByTagName - который вернет все теги, которые имеют определенное имя (пока вы хотите только некоторые из них).

Вместо этого я бы использовал запрос XPath в вашем документе, используя класс DOMXpath.


Например, что-то вроде этого должно делать, чтобы загрузить HTML-строку в объект DOM и экземпляр класса DOMXpath:

$html = <<<HTML
<div class="main">
    <div class="text">
    Capture this text 1
    </div>
</div>

<div class="main">
    <div class="text">
    Capture this text 2
    </div>
</div>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);


И тогда вы можете использовать запросы XPath, используя метод DOMXPath::query, который возвращает список элементов, которые вы искали:

$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
    var_dump(trim($tag->nodeValue));
}


И выполнение этого дает мне следующий результат:

string 'Capture this text 1' (length=19)
string 'Capture this text 2' (length=19)

Ответ 2

Вы можете использовать http://simplehtmldom.sourceforge.net/

Очень простой в использовании парсер DOM, написанный на php, с помощью которого вы можете легко получить содержимое тега div.

Что-то вроде этого:

// Find all <div> which have attribute id=text
$ret = $html->find('div[id=text]'); 

Дополнительную информацию см. в документации по этому вопросу.