Эти три слова постоянно встречаются рядом, и их регулярно используют как синонимы. На самом деле это три разных процесса, которые решают разные задачи и чаще всего работают вместе — как звенья одной цепочки. Разберём каждый по очереди, посмотрим, как они связаны, и поговорим о типичных проблемах каждого.
Если совсем коротко:
- Краулинг — находит страницы (ходит по ссылкам).
- Скрапинг — забирает нужные данные со страницы.
- Парсинг — разбирает сырой текст/разметку в удобную структуру.
Парсинг (parsing)
Парсинг — это разбор данных по определённым правилам и превращение их из «сырого» вида в структурированный.
Слово пришло из computer science, где парсер — это компонент, который читает последовательность символов (например, исходный код программы, JSON, XML или HTML) и строит из неё структуру, понятную машине: дерево, объект, набор полей.
Простой пример. У нас есть строка HTML:
<div class="price">1 299 ₽</div>
Парсер превращает это в дерево элементов (DOM), по которому можно «ходить» и
спрашивать: «дай мне содержимое элемента с классом price». На выходе мы
получаем уже не строку символов, а понятное значение 1 299 ₽, из которого
дальше можно вытащить число 1299.
Важно: парсинг сам по себе ничего не скачивает из интернета. Он работает с уже имеющимся текстом. Распарсить можно локальный файл, ответ API или строку, которую вам прислали в сообщении. Парсинг — это про структуру, а не про источник.
Скрапинг (scraping)
Скрапинг (web scraping) — это извлечение конкретных данных с веб-страниц.
Скрапер делает две вещи:
- Скачивает страницу (отправляет HTTP-запрос и получает HTML).
- Достаёт из неё нужные данные — цены, заголовки, контакты, отзывы.
И вот на втором шаге скрапер как раз использует парсинг как инструмент: чтобы вытащить цену из страницы, её сначала нужно распарсить. То есть парсинг — это часть скрапинга, его внутренний этап, а не отдельная альтернатива.
Скрапинг обычно нацелен на конкретные данные с конкретных страниц. Классические задачи: собрать цены конкурентов, выгрузить каталог товаров, собрать объявления, мониторить новости.
Краулинг (crawling)
Краулинг — это систематический обход страниц по ссылкам.
Краулер (его ещё называют паук, бот, spider) начинает с одной или нескольких стартовых страниц, находит на них все ссылки, переходит по ним, находит новые ссылки — и так далее. Его задача — не вытащить конкретное поле, а обнаружить и обойти как можно больше страниц.
Самый известный пример краулеров — поисковые системы. Боты Google и Яндекса постоянно обходят интернет, чтобы знать, какие страницы вообще существуют, и проиндексировать их.
В реальных проектах краулинг и скрапинг часто объединяют: краулер обходит каталог интернет-магазина страница за страницей, а на каждой найденной странице товара запускается скрапер, который достаёт цену, название и характеристики — а внутри он, в свою очередь, парсит HTML, чтобы до этих данных добраться.
Как всё связано
Удобнее всего представить это как конвейер:
- Краулинг отвечает на вопрос «какие страницы обрабатывать?»
- Скрапинг — «что с этих страниц забрать?»
- Парсинг — «как превратить разметку в данные?»
Можно делать парсинг без скрапинга (разобрать готовый файл). Можно делать скрапинг без полноценного краулинга (когда список страниц уже известен). А краулинг почти всегда идёт в связке со скрапингом — иначе обход страниц бессмысленен.
Про терминологию: почему в русском «парсинг» — это часто про скрапинг
Здесь кроется главная путаница русскоязычной сферы.
В английском языке разделение довольно чёткое: процесс сбора данных с сайтов называют web scraping, а parsing — это именно технический разбор разметки. В русском же языке исторически прижилось слово «парсинг» как общее название для всего процесса сбора данных с сайтов. Говорят «парсинг сайтов», «спарсить каталог», «написать парсер для маркетплейса» — и почти всегда имеют в виду именно скрапинг.
Почему так вышло? Слово «парсинг» появилось в русскоязычной среде разработчиков раньше и звучало привычнее, его подхватили на форумах и в статьях, и оно «склеилось» со всей задачей целиком. «Скрапинг» же пришёл позже и до сих пор многим кажется менее понятным.
Но строго говоря, это не совсем точно. Парсинг — это лишь один из этапов скрапинга, а именно разбор уже скачанной разметки. Когда человек говорит «я парсю сайт», на самом деле он:
- скачивает страницы (это ближе к скрапингу/краулингу),
- достаёт нужные данные (скрапинг),
- и только внутри второго шага реально парсит HTML.
То есть народное «парсинг» описывает весь процесс, хотя технический термин покрывает только его маленькую часть. Это не ошибка в бытовом смысле — язык живёт своими правилами, и в разговоре вас прекрасно поймут. Но если вы читаете англоязычную документацию или общаетесь с зарубежными коллегами, держите в голове: их parsing ≠ наш «парсинг», а ваш «парсинг сайта» по смыслу — это их scraping.
Проблемы парсинга
Парсинг кажется простым, пока разметка аккуратная. На практике мешает следующее.
- «Битый» HTML. Браузеры очень снисходительны: они отображают страницу, даже если теги не закрыты или вложены неправильно. Парсеру же приходится как-то угадывать структуру, и результат может оказаться неожиданным.
- Изменчивая структура. Вы написали правило «бери цену из элемента с классом
price», а сайт через месяц переименовал класс — и всё ломается. Парсинг, завязанный на конкретную вёрстку, очень хрупок. - Динамический контент. Многие сайты подгружают данные уже после загрузки страницы, через JavaScript. В исходном HTML нужных данных просто нет — парсить нечего, пока страницу не «отрендерить» в настоящем браузере.
- Кодировки. Неправильно определённая кодировка превращает текст в «кракозябры», и числа/буквы вытаскиваются с ошибками.
- Неоднозначность. Иногда одинаково размечены разные по смыслу данные, и без дополнительных правил их сложно различить.
Проблемы скрапинга
Здесь к проблемам парсинга добавляются сложности, связанные с тем, что мы обращаемся к чужому сайту через сеть.
- Защита от ботов. Сайты используют CAPTCHA, ограничение частоты запросов (rate limiting), блокировку по IP, анализ поведения. Слишком активный скрапер быстро ловит бан.
- JavaScript-сайты. Если данные подгружаются скриптами, обычного запроса мало — нужен «безголовый» браузер (headless browser), который реально выполнит JS. Это сильно медленнее и тяжелее.
- Хрупкость и поддержка. Сайт меняет вёрстку — скрапер ломается. Любой скрапер требует постоянного сопровождения, это не «написал и забыл».
- Ловушки (honeypots). Иногда на страницы специально добавляют невидимые для человека ссылки или поля. Человек их не замечает, а бот переходит по ним — и выдаёт себя.
- Правовые и этические вопросы. Условия использования сайта (ToS), авторские права, персональные данные, нагрузка на чужие серверы. Технически возможное далеко не всегда допустимо юридически — это всегда стоит проверять отдельно.
robots.txt. Файл, в котором сайт указывает, что можно и что нельзя обходить ботам. Его уважают как минимум из вежливости (а часто и по юридическим/этическим соображениям).
Проблемы краулинга
У краулинга свои, особенные сложности — они возникают именно из-за того, что бот сам решает, по каким ссылкам идти, и масштаб может стать огромным.
Зацикливание и «ловушки для краулеров»
Это, пожалуй, самая характерная проблема краулинга.
- Циклы по ссылкам. Страница A ссылается на B, B ссылается на C, а C снова на A. Если краулер не помнит, где уже был, он будет бесконечно ходить по кругу. Базовое решение — вести список уже посещённых адресов (URL) и не заходить туда повторно.
- Бесконечные «ловушки» (crawler traps). Хуже простых циклов те случаи, где сайт генерирует бесконечно новые адреса. Классические примеры:
- Календарь. Виджет с кнопкой «следующий месяц» может вести в бесконечность: краулер будет кликать «вперёд» в 2099-й год и дальше.
- Бесконечные фильтры и сортировки. Каждое сочетание параметров в адресе
(
?sort=price&color=red&page=2…) выглядит как новая страница, хотя контент почти тот же. Комбинаций — астрономически много. - Идентификаторы сессий в адресе. Если сайт подставляет в URL уникальный
session id, то одна и та же страница каждый раз выглядит как новая, и список «посещённых» не спасает — адреса-то разные. - Дубликаты страниц. Один и тот же контент доступен по нескольким адресам
(со слешем и без, с
wwwи без, с разными параметрами). Без нормализации адресов краулер тратит силы на одно и то же по много раз.
Решают это нормализацией URL (приведением адресов к единому виду), ограничением глубины обхода, лимитами на число страниц с одного домена, отсечением подозрительно «плодящихся» разделов и распознаванием ловушек.
Масштаб и вежливость
- Объём. Интернет (и даже один крупный сайт) огромен. Нужно решать, что обходить в первую очередь (приоритизация), и не пытаться скачать всё подряд.
- Нагрузка на сервер. Слишком частые запросы могут «положить» чужой сайт. Поэтому вводят задержки между запросами (crawl delay) и ограничивают параллельность — это называют «вежливым» краулингом.
- Свежесть данных. Страницы меняются. Приходится решать, как часто возвращаться и перепроверять уже обойдённое, чтобы данные не устаревали.
- Невидимые страницы. Часть контента не достижима простым переходом по ссылкам (за формами, за авторизацией, в «глубоком вебе») — туда краулер сам по себе не попадёт.
Короткое резюме
| Процесс | Что делает | Главный вопрос | Типичная боль |
|---|---|---|---|
| Краулинг | Обходит страницы по ссылкам | «Какие страницы обрабатывать?» | Зацикливание, ловушки, масштаб, нагрузка |
| Скрапинг | Скачивает страницу и достаёт данные | «Что забрать со страницы?» | Защита от ботов, JS-сайты, хрупкость, право |
| Парсинг | Разбирает разметку в структуру | «Как превратить HTML в данные?» | «Битый» HTML, изменчивая вёрстка, кодировки |
И главное, что стоит запомнить про терминологию: в русском языке «парсинг» по привычке называют весь процесс сбора данных с сайтов, хотя точнее это скрапинг, внутри которого парсинг — лишь этап разбора разметки. В разговоре это не страшно, но при работе с англоязычными источниками разницу полезно держать в голове.