Парсинг данных со страниц сайтов

Admin PHP

Заметка о том, как собирать данные со страницы другого сайта с помощью библиотеки simple_html_dom.

Я уже касался темы поиска информации на страницы с помощью регулярных выражений и функций preg_match и preg_replace. Также разбирал как менять информацию на странице WordPress записи. Теперь разберём сбор информации сторонними инструментами, которые призваны упростить сбор данных.

simple_html_dom

Есть несколько библиотек упрощающих парсинг страниц. В данном примере мы будем использовать библиотеку simple_html_dom.php.

Библиотеку можно скачать на официальном сайте, там же инструкции к ней.

Скачиваем архив к себе на компьютер. Разархивируем его и файл simple_html_dom.php заливаем на свой сервер.

Теперь подключаем этот файл:

include get_template_directory() . '/inc/library/simple_html_dom.php';

^^ путь приведен для тем сайтов на WordPress.

Перед работой, в самом файле simple_html_dom.php надо закомментировать строчку:

$contents = file_get_contents($url, $use_include_path, $context, $offset);

Вместо неё поставить:

$contents = file_get_contents($url, $use_include_path, $context);

Это делается, чтобы избежать ошибок, которые могут появляться:

Notice: Undefined variable: item in /wp-content/themes/ploshadka.net/parser-page.php on line 31

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.

<?php

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 мы нашли информацию находящуюся в теге:

<td class="person">Иван <strong>Иванов</strong></td>

Найденное выражение можно вывести в разных вариантах (если варианты существуют, потому что выше мы сузили поиск и ограничили переменной $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»:

foreach ( $html->find('div#table') as $array ) {
}

Выведет все текстовые значения внутри ссылки:

foreach($html->find('a') as $element) {
   echo $element->plaintext . '<br>';
}

Сохранит найденное в переменную, массив данных из которой потом можно вывести отдельно:

$var = $html->find('a');
echo $var[0]->plaintext; // вывод данных

Отдельные части опять же можно сохранить в переменную:

$var = $var[0]->plaintext;

Также читайте более сложные примеры работы с этой библиотекой php.

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Парсинг данных со страниц сайтов"