Заметка о том, как собирать данные со страницы другого сайта с помощью библиотеки simple_html_dom.
Я уже касался темы поиска информации на страницы с помощью регулярных выражений и функций preg_match и preg_replace. Также разбирал как менять информацию на странице WordPress записи. Теперь разберём сбор информации сторонними инструментами, которые призваны упростить сбор данных.
simple_html_dom
Есть несколько библиотек упрощающих парсинг страниц. В данном примере мы будем использовать библиотеку simple_html_dom.php.
Библиотеку можно скачать на официальном сайте, там же инструкции к ней.
Скачиваем архив к себе на компьютер. Разархивируем его и файл simple_html_dom.php заливаем на свой сервер.
Теперь подключаем этот файл:
^^ путь приведен для тем сайтов на WordPress.
Перед работой, в самом файле simple_html_dom.php надо закомментировать строчку:
Вместо неё поставить:
Это делается, чтобы избежать ошибок, которые могут появляться:
Notice: Undefined offset: 0 in /wp-content/themes/ploshadka.net/parser-page.php on line 89
Notice: Trying to get property of non-object in /wp-content/themes/ploshadka.net/parser-page.php on line 89
php — Fatal error: Call to a member function find() on a non-object …
Uncaught Error: Call to a member function findfind() on string in
В этой статье я не буду касаться того как скачать файл с другого сайта к себе на сервер. Но лучше парсить страницы, предварительно скачав их себе.
Пример нахождения html тега td с классом person.
include get_template_directory() . '/inc/library/simple_html_dom.php';
// Можно вставить адрес страницы напрямую
$url = '/download/file.htm';
if (file_exists($url)) {
$html = file_get_html($url);
$i=0; // задаём счет
foreach ( $html->find('td.person') as $person ) {
$i++;
if($i==2) break; // Останавливаем поиск после первого найденного объекта
$person = $person->plaintext; // В переменную положим найденное
echo $person;
}
// Очищаем вывод, чтобы не засорялся буфер обмена
$html->clear();
unset($html);
}
?>
Основные моменты в коде выше я сопроводил пояснениями.
С помощью этого php мы нашли информацию находящуюся в теге:
Найденное выражение можно вывести в разных вариантах (если варианты существуют, потому что выше мы сузили поиск и ограничили переменной $i).
$person = $person->plaintext;
Покажет: <td class="person">Иван <strong>Иванов</strong></td>
$person = $person-> outertext;
Покажет содержимое между тегами: Иван <strong>Иванов</strong>
$person = $person-> innertext;
Выведет td
$person = $person-> tag;
Примеры поиска и вывода данных
Найдёт html тег div с id = «table»:
}
Выведет все текстовые значения внутри ссылки:
echo $element->plaintext . '<br>';
}
Сохранит найденное в переменную, массив данных из которой потом можно вывести отдельно:
echo $var[0]->plaintext; // вывод данных
Отдельные части опять же можно сохранить в переменную:
Также читайте более сложные примеры работы с этой библиотекой php.