Парсинг данных и документов¶
Парсинг — это процесс разбора структурированных или неструктурированных данных из различных источников (веб-страниц, файлов, баз данных, потоков сообщений) с целью извлечения нужной информации и преобразования её в удобный для дальнейшей обработки формат. Термин происходит от английского parsing (в свою очередь от лат. pars — часть) и означает «разбор по частям». В информатике парсингом также называют синтаксический анализ — этап обработки языков программирования и формальных языков, при котором последовательность символов преобразуется в дерево синтаксического разбора (AST) согласно грамматике.
¶Основные виды парсинга
¶Парсинг веб-страниц (веб-скрапинг)
В бытовом и коммерческом контексте под парсингом чаще всего понимают автоматический сбор данных с сайтов. Скрипт (парсер) обращается к веб-странице по HTTP-запросу, получает HTML-код, затем находит в нём нужные элементы — заголовки, цены, описания, изображения, ссылки — и сохраняет их в структурированном виде: таблицу, JSON, XML или базу данных.
Для извлечения данных из HTML используются:
- CSS-селекторы и XPath — языки адресации элементов страницы, позволяющие точно указать, какие теги нужны (например,
div.price > spanили//h2[@class='title']); - DOM-парсеры — библиотеки, строящие дерево документа и облегчающие навигацию по нему;
- Готовые фреймворки — Scrapy и BeautifulSoup на Python, Cheerio на Node.js, jsoup на Java.
¶Синтаксический анализ в информатике
В теории формальных языков парсинг — это преобразование входной последовательности токенов в дерево разбора согласно грамматике. Различают:
- Левосторонний разбор — грамматика раскрывается слева направо, строится левоеmost-дерево;
- Правосторонний разбор — аналогично, но справа налево;
- Нисходящий парсинг — от корня (стартового символа) к листьям (терминалам);
- Восходящий парсинг — от входных символов к корню.
Популярные инструменты: ANTLR, Bison, Yacc, парсер-комбинаторы (Parsec, Parsley). Результат работы парсера компилятора — синтаксическое дерево, которое затем используется для генерации кода, интерпретации или статического анализа.
¶Парсинг структурированных форматов
Для данных в известном формате (JSON, XML, CSV, YAML) парсинг сводится к десериализации: чтению потока символов и построению объектов в памяти программы. Здесь обычно не требуется грамматика — достаточно стандартной библиотеки языка программирования (json.load в Python, JSON.parse в JavaScript).
¶Типичные задачи парсинга
- Сбор конкурентной разведки — мониторинг цен и ассортимента в интернет-магазинах;
- Наполнение каталогов и агрегаторов (товары, вакансии, недвижимость);
- Аналитика социальных медиа — сбор публичных постов и комментариев для исследований;
- Индексация поисковыми системами — краулеры Google и Яндекса фактически являются парсерами;
- Извлечение данных из документов — PDF, счетов, договоров, сканов (в т.ч. с применением OCR);
- Обучение языковых моделей — сбор корпусов текста из открытых источников.
¶Правовые и технические ограничения
Законность парсинга зависит от юрисдикции и условий использования сайта. В России сбор общедоступных данных обычно не запрещён, однако обход технических средств защиты (капч, авторизации, ограничений частоты запросов) может квалифицироваться как несанкционированный доступ к компьютерной информации (ст. 272 УК РФ). Многие сайты в пользовательских соглашениях прямо запрещают автоматический сбор данных. Отдельно регулируется персональные данные — их обработка подчиняется Федеральному закону № 152-ФЗ «О персональных данных».
Сайты защищаются от парсинга несколькими способами:
- Капчи (CAPTCHA) — задачи, которые трудно решить алгоритмически;
- Ограничение частоты запросов (rate limiting) и блокировка IP-адресов;
- Динамическая генерация HTML с помощью JavaScript — данные подгружаются после загрузки страницы, что требует использования headless-браузеров (Puppeteer, Playwright, Selenium);
- Проверка User-Agent и других HTTP-заголовков.
¶Парсинг и машинное обучение
В контексте обработки естественного языка (NLP) парсинг означает построение синтаксической или семантической структуры предложения: разбор на части речи (POS-таггинг), выявление грамматических отношений (зависимостный или фразовый парсинг), определение семантических ролей. Такие инструменты, как Stanza, spaCy и UDPipe, используются для анализа русского языка в лингвистических и прикладных исследованиях.
¶Пример простого парсера
Минимальный парсер на Python с использованием BeautifulSoup выглядит примерно так: библиотека requests загружает страницу, BeautifulSoup разбирает HTML-код в дерево объектов, затем с помощью CSS-селектора извлекается, например, список заголовков новостей и сохраняется в CSV-файл. Такой скрипт в несколько десятков строк способен собирать сотни записей в час.
Источники:
- Марков К. А. «Алгоритмы и структуры данных»
- Голдберг Э., Робсон Д. «Язык программирования Java»
- Документация библиотек BeautifulSoup, Scrapy, spaCy
- Федеральный закон № 152-ФЗ «О персональных данных»
- Уголовный кодекс РФ, статья 272
