Парсер сайта на PHP

В строке $doc = new DOMDocument(); происходит инициализация экземпляра класса DOMDocument, который представляет все содержимое HTML- или XML-документа. А с помощью метода loadHTML() мы загружаем HTML из строки. Далее в строке new DOMXpath($doc) создаем экземпляр класса DOMXPath, который поддерживает язык запросов XPath 1.0. Подробнее про все методы и их особенности можно ознакомиться по ссылкам выше.

Переменная $startPage содержит номер начальной страницы, т.е. самой первой страницы на сайте. Аналогично, переменная $endPage содержит номер самой последней возможной страницы на сайте (имеется в виду номер страницы, который доступен в контексте по адресу, указанному в переменной $url).

Далее операция получения данных с сайта работает до тех пор, пока не будет достигнута последняя страница.

Внутри цикла while каждую итерацию создается новый экземпляр DOMDocument, загружается HTML из строки и создается новый экземпляр класса DOMXpath. Большинство участков кода имеют комментарии и пояснения.

Обратим внимание на функцию function parseNumberLastPage(DOMXpath $xPath) — извлекает последний номер страницы. В данном случае анализируются ссылки на странице в самом низу сайта и получаем последнюю страницу.

Также была создана функция function parseContent(DOMXpath $xPath, $query = ‘//’, $compare = », $lenCut = 0) для получения контента. Особых сложностей в ее работе нет, так что не стану описывать подробнее.

Для получения информации о режиссере пришлось создать отдельную функцию function parseGetProducer(DOMXpath $xPath). Все это связано с тем, что в некоторых записях (анонсах аниме) отсутствовал режиссер. В результате происходило смещение и информация не правильно собиралась с сайта. В ней сначала анализируется страница и собирается массив с информацией о режиссере (если режиссера нет, то заполняется пустой строкой). Затем происходит сравнение, в котором проверяется, если узел содержит автора с пустой строкой, то аналогично заполняем пустой строкой, иначе берем информацию о режиссере из другого массива.

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

Еще я написал функцию getRandomUserAgent() для получения случайного заголовка браузера, т.к. некоторые сайты не хотят отдавать свои данные, если им не передать подобный заголовок. Случайность добавлена просто для разнообразия.

Отмечу, что это лишь демонстрация возможностей работы с xPath в PHP. Я не стал заморачиваться с проверкой различных ошибок, т.к. задача была в максимально короткий срок получить необходимые данные. Вы же в свою очередь можете доработать скрипт под себя и даже сделать его еще лучше. Таким образом можно парсить практически любой сайт. Для этого достаточно ознакомиться с синтаксисом xPath.

Полезные ссылки

Парсер сайта на PHP (исходный код на GitHub)

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: