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

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.

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

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

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