Давайте разберёмся, что такое парсер или граббер в программировании. Что собой представляет процесс парсинга на примерах создания PHP-грабберов. В качестве бонуса — готовые парсеры RSS-ленты и получения контентной части статей с их demo-сайтами.
Парсер (от англ. parser) или граббер (от англ. grabber) — программное обеспечение, предназначенное для анализа и разбора исходных данных, с целью их обработки и дальнейшей использования в требуемом виде.
Происхождение термина «граббер» тесно связано с парсерами, но подразумевает извлечение данных из источника для этого не предназначенного, т. е. мы буквально «грабим» данные источника для их использования в личных целях.
Сам же процесс парсинга (англ. parsing) или скраппинга (англ. skrapping) обычно подразумевает выявление уникальных признаков или закономерностей употребления интересующего нас фрагмента данных, с целью построения соответствующих правил их «выделения» и «захвата» в исходных данных.
Пример использования cURL для PHP-граббера
Отдельно стоит отметить, что для работы граббера зачастую используется имитация браузера (например, подмена User Agent) с целью скрытия процесса граббинга и обхода защиты от граббинга.
Рассмотрим регулярное выражение: '(\d+)\s*рублей'iu — подробней:
само выражение «обёрнуто» одинарными кавычками с целью использования модификаторов: i — игнорировать регистр и u — используется UTF-кодировка;
круглые скобки — подмаска, с вложенным правилом, которая возвращается как второе значение массива $matches[1];
\d — спецсимвол для обозначения символа от 0 до 9;
+ — квантификатор для обозначения одного или более символов;
\s — спецсимвол для обозначения пробельного символа (пробел, табуляция и т. д.);
* — квантификатор для обозначения ни одного или более символов.
Примечание: парсер может быть написан на любом языке программирования: C#, Delphi, Java, PHP и т. д., но суть его от этого не меняется.
Частным и частым случаем парсинга служит разбор структурированных данных в формате XML или HTML.
XML-парсер на PHP
Для создания XML-парсера на PHP удобно использовать расширение SimpleXML для преобразования XML в объект, например: