Возникает необходимость вытащить с какой-нибудь страницы HTML какой-нибудь тэг или класс. На помощь может прийти стандартный HTML-класс DOMDocument
$dom = new DOMDocument;
$dom->loadHTML($html);
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
$image->setAttribute('src', 'http://example.com/' . $image->getAttribute('src'));
}
$html = $dom->saveHTML();
Но работает он крайне нестабильно, хотя бы по причине того, что не совсем корректно отрабатывает, если в дереве тэги закрыты не все.
Поэтому можно воспользоваться достаточно простой для использования библиотеки Simple HTML DOM
Эта библиотека позволяет парсить страницу используя многим привычные jQuery-селекторы. Эта библиотека умеет фильтровать элементы, искать вложенные и обращаться к их атрибутам, а также она адекватно работает с не совсем корректным HTML-кодом и проблемы с кодировкой у неё особых нет.
Мне нужно было найти все изображения на странице и вывести их на экран, код для подобного есть в примерах на сайте, поэтому тут все просто
$html = str_get_html($url);
$images = $html->find('img');
foreach ($images as $image) {
echo '<img src='.$image-src.'>';
}
Вот пример от создателей. В этом примере сначала подгружается, а потом модифицируется заранее заготовленный HTML-код: во второй строке происходит добавление атрибута class со значением bar первом попавшемуся элементу div, а в следующей строке мы заменяем текст элемента с id=”world” на foo.
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');
$html->find('div', 1)->class = 'bar';
$html->find('div[id=hello]', 0)->innertext = 'foo';
echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>