Парсинг и скрапинг информации в сети


«…если программирование — волшебство, то скрапинг и парсинг — настоящее колдовство: применение магии для создания невероятно впечатляющих и полезных, но при этом удивительно простых чудес»

Райан Митчелл

Парсинг с помощью Python. Веб-скрапинг в действии. 3-е межд. изд.. — Астана: «Спринт Бук», 2025.

Понятие и правовая основа парсинга и скрапинга

Парсинг (англ. parsing — разбор, синтаксический анализ, синтаксический разбор) — в английском языке данный термин может иметь несколько значений в зависимости от контекста:

  • в общем смысле — процесс разделения текста на составляющие части для понимания его смысла;
  • в контексте компьютерных дисциплин — анализ строки символов для определения ее грамматической структуры;
  • в контексте поиска и извлечения информации — анализ больших объемов данных, извлечение и анализ определенных фрагментов.

В контексте рассматриваемого вопроса термин «парсинг» понимается как процесс автоматизированного сбора и систематизации информации из открытых источников с помощью скриптов.

Скрипт (сценарий) — набор команд (последовательность действий) для электронного устройства, описанная на понятном ему языке (языке программирования).

В соответствии со ст. 7 Федерального закона от 27.07.2006 № 149-ФЗ «Об информации, информационных технологиях и о защите информации» (далее — ФЗ «Об информации»), к общедоступной информации относятся общеизвестные сведения и иная информация, доступ к которой не ограничен. Общедоступная информация может использоваться любыми лицами по их усмотрению при соблюдении установленных федеральными законом ограничений в отношении распространения такой информации.

Информация, размещаемая ее обладателями в сети «Интернет» в формате, допускающем автоматизированную обработку без предварительных изменений человеком в целях ее повторного использования, является общедоступной информацией, размещаемой в форме открытых данных.

В соответствии со ст. 8 ФЗ «Об информации» граждане (физические лица) и организации (юридические лица) вправе осуществлять поиск и получение любой информации в любых формах и из любых источников при условии соблюдения требований, установленных ФЗ «Об информации» и другими федеральными законами.

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

Теоретически веб-скрапинг — это сбор данных с помощью любых средств, кроме программ, использующих API (или через браузер пользователя). Чаще всего для этого пишут программу, которая автоматически отправляет запрос на веб-сервер, получает данные (обычно в формате HTML или других форматах веб-страниц), а затем «парсирует» их для извлечения полезной информации.

Выделяют синтаксический и семантический парсинг

Синтаксический парсинг заключается в изучении и анализе иерархической структуры данных, например HTML-кода сайта. Он позволяет определить, где находится нужная информация и как ее извлечь. В процессе парсинга работают с тегами, атрибутами и содержимым каждого элемента страницы. Как правило, его используют для  автоматизации задач сбора данных с сети или составления базы данных товаров, извлечения информации о ценах и наличии в онлайн-магазинах или для сбора актуальных новостей с новостных порталов и т.п.

Семантический парсинг позволяет находить не только сами данные, но и понимать их смысл и контекст. Это особенно полезно при обработке структурированных данных, таких как HTML или XML, где смысл каждого элемента и его взаимосвязи имеют большое значение. Семантический парсинг позволяет  эффективно обрабатывать данные, так как позволяет определить их содержание без привязки к конкретным манипуляциям с текстом, анализировать структуру документа и его элементы, определять их функциональность и классифицировать в соответствии с определёнными критериями, является основой для более сложных и интеллектуальных задач, таких как автоматизация анализа текста, поиск семантически связанных данных и других приложений, где важно понимание содержания данных.


Практический пример

Предположим, что для проведения научного исследования необходимо получить полную версию книги «Толковый словарь по искусственному интеллекту» под редакцией А.Н. Аверкина, М.Г. Гаазе-Рапопорт и Д.А. Поспелова, издательства «Радио и Связь», г. Москва, 1992 г.

Осуществив поиск на сайте электронной библиотеки https://reallib.org/, было обнаружено указанное издание в формате *.png, где каждая страница книги размещена отдельно и открывается посредством GET-запроса на дочернюю страницу сайта в формате https://reallib.org/reader?file=504091&pg=1. Сайт допускает возможность постраничного просмотра и скачивания полного издания книги. Книга содержит 258 страниц, следовательно, для скачивания всего издания, требуется 258 раз перейти на новую страницу и сохранить эту страницу в новый файл формата *.png.

Решение задачи средствами Python

Установка и настройка Python и IDE описана на странице — https://infocrime.ru/python_tools/

Для решения данной задачи понадобиться только одна библиотека python — Requests


Requests — это библиотека для выполнения HTTP-запросов на языке Python. Она создана для упрощения взаимодействия с API и веб-сервисами, получения данных с веб-сайтов и выполнения других задач на основе HTTP.


На странице https://reallib.org/reader?file=504091&pg=1, переходим в «режим разработчика» (клавиша F12) и ищем графический файл *.png формата, который является одной из страниц книги. При наведении на строку кода, данный элемент будет подсвечиваться на экране.

Искомая строка — /loader/img.php?dir=18b74c5ffa3cd0b74138a83a0c814087&file=1.png

На следующей странице книги строка будет иметь вид — /loader/img.php?dir=18b74c5ffa3cd0b74138a83a0c814087&file=2.png, то есть отличаться только цифрой «2» от предыдущей. Следовательно, наша задача сделать 258 GET-запросов и последовательно сохранить графические файлы, расположенные по указанным адресам.

Пример кода Python

import requests


storage_number = 1

for storage in range(258):
    link_img = f"https://reallib.org/loader/img.php?dir=18b74c5ffa3cd0b74138a83a0c814087&file={storage_number}.png"
    image_byte = requests.get(link_img).content
    with open(f'{storage_number}.png', 'wb') as file:
        file.write(image_byte)

    storage_number +=1

В результате будет получен набор файлов, содержащий изображения страниц книги в формате «номер_страницы.png».

Для избежания ошибок и возможных пропусков файлов, рекомендуется делать временную задержку между запросом и сохранением файла.