Парсинг

Оригинальное название: parsing

Коротко

Разбор текста или потока данных по правилам формата, после которого программа получает удобную структуру: дерево, массив, объект.

Что такое «Парсинг»

Компьютер получает на вход просто последовательность символов. Чтобы понять, что {"id": 5} — объект с полем, а <h1> — заголовок, нужен парсер. Классический парсер работает в два этапа: лексический анализ разбивает текст на лексемы (числа, имена, скобки), синтаксический собирает из них дерево по правилам грамматики. Так устроены интерпретатор PHP, браузер при чтении HTML и CSS, любая библиотека для JSON или XML.

В разговорной речи «парсингом» чаще называют автоматический сбор данных с чужих сайтов: цен конкурентов, характеристик товаров, остатков поставщика. Строго говоря, это скрейпинг, а разбор HTML — лишь его часть. Для такой задачи есть отдельная услуга — парсинг товаров и цен.

Пример: заголовки из HTML на PHP

$doc = new DOMDocument();
libxml_use_internal_errors( true ); // не шуметь из-за кривой вёрстки
$doc->loadHTML( $html );

$xpath = new DOMXPath( $doc );
foreach ( $xpath->query( '//h2' ) as $node ) {
    echo trim( $node->textContent ), PHP_EOL;
}

Парсер строит дерево документа, а запрос XPath выбирает из него нужные узлы. Тот же подход работает для фида поставщика в XML.

Типичные ошибки

  • Разбирать HTML регулярными выражениями. Для одной строки это сработает, но вложенные теги, атрибуты в другом порядке и переносы строк быстро ломают шаблон.
  • Доверять входным данным. Поле может отсутствовать, число прийти строкой, кодировка оказаться Windows-1251. Результат разбора стоит проверять, прежде чем писать в базу.
  • Молча проглатывать ошибки формата. json_decode() по умолчанию возвращает null на битом JSON; с флагом JSON_THROW_ON_ERROR он выбрасывает исключение, и сбой виден сразу.

Когда сбор данных с сайтов не стоит делать

Если у источника есть API или выгрузка, лучше пользоваться ими: структура стабильна, а разметка сайта может поменяться в любой день. Кроме того, при сборе стоит учитывать правила сайта-источника и нагрузку на него.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение