Парсер и скрейпер часто называют одним и тем же, но термины описывают разные части работы с данными. Парсер разбирает текст, код или документ на понятные части. Скрейпер забирает данные с сайта или другого источника и передаёт их дальше, часто как раз в парсер.
Если говорить коротко: парсер отвечает на вопрос «как разобрать полученные данные», а скрейпер – на вопрос «как получить данные из внешнего источника».
Что такое парсер и что такое скрейпер
Парсер, от английского parse, превращает исходный материал в структуру, с которой может работать программа. Исходным материалом может быть HTML-страница, XML-файл, JSON-ответ, CSV-таблица, лог сервера, письмо, прайс-лист или любой другой текстовый формат. Парсер ищет в данных теги, поля, атрибуты, строки, даты, цены, имена, ссылки и другие элементы.
Например, HTML-страница для человека выглядит как сайт, а для программы – как набор тегов, атрибутов и текста. Парсер строит из такого набора дерево элементов. Документация Python описывает HTMLParser как основу для разбора файлов в формате HTML и XHTML. MDN описывает DOMParser как механизм, который разбирает строку с HTML или XML и возвращает отдельный документ в памяти.
Скрейпер, от английского scrape, собирает данные с сайта или сервиса. Обычно скрейпер отправляет запрос к странице, получает HTML, извлекает нужные блоки и сохраняет результат в таблицу, базу данных, файл или другую систему. Скрейпер может собирать цены товаров, вакансии, карточки компаний, новости, расписания, отзывы, характеристики устройств и другие открытые сведения.
Простой пример связки: скрипт на Python делает запрос через requests и передаёт полученный HTML в Beautiful Soup. В этой паре requests – скрейпер, а Beautiful Soup – удобная обёртка над парсером: она позволяет искать элементы в дереве разбора по тегам, классам и атрибутам. Для более сложных задач используют Scrapy – это уже полноценный фреймворк, который совмещает функции краулера, скрейпера и парсера.
Как работает парсер
Парсер начинает работу после того, как данные уже появились у программы. Источник не так важен: данные могли прийти из файла, API, HTML-страницы, очереди сообщений или формы на сайте. Парсер читает содержимое, проверяет формат, разбивает материал на элементы и возвращает структуру. Для HTML такой структурой обычно становится дерево документа, для JSON – объект с полями, для CSV – таблица со строками и колонками.
Работа парсера выглядит просто только снаружи. Внутри возникают проблемы с неправильной кодировкой, битой вёрсткой, лишними пробелами, разными форматами дат, вложенными тегами и пропущенными полями. Поэтому парсер не должен просто искать текст по шаблону. Надёжный парсер учитывает структуру документа и спокойно переживает небольшие изменения в исходных данных. Если сайт поменял название CSS-класса или переставил теги местами, парсер перестанет находить нужные поля – это самая частая причина поломок в реальных проектах.
Как работает скрейпер
Скрейпер работает шире. Сначала он выбирает адреса страниц или получает список ссылок. Затем отправляет HTTP-запросы, получает ответы сервера, передаёт HTML или JSON на разбор, извлекает нужные поля и сохраняет результат. В простом случае скрейпер скачивает одну страницу. В более сложном – проходит по пагинации, открывает карточки товаров, обходит категории, учитывает лимиты запросов и повторяет попытку после временной ошибки. Хорошей практикой считается указывать реалистичный User-Agent и делать небольшие паузы между запросами (rate limiting), чтобы не создавать лишнюю нагрузку на сайт и снизить риск блокировки.
На динамических сайтах скрейперу сложнее. Часть данных может подгружаться после открытия страницы через JavaScript. Тогда обычного запроса к HTML недостаточно. Скрейпер либо ищет внутренний API, который отдаёт данные в JSON, либо использует браузерную автоматизацию – например, Playwright или Puppeteer. Второй путь тяжелее, медленнее и дороже, потому что программа фактически запускает браузер, ждёт, пока страница загрузится, и только потом забирает нужные элементы.
Краулер добавляет ещё один слой. Краулер не просто забирает данные с конкретной страницы, а обходит множество страниц по ссылкам. Поисковые системы используют краулеры, чтобы находить страницы для индекса. Скрейпер может включать краулер, если нужно собрать данные не с одного адреса, а со всего раздела сайта. Краулер не обязан сам извлекать данные (цены, тексты) – иногда это отдельный процесс.
Чем отличается парсер от скрейпера
| Критерий | Парсер | Скрейпер |
|---|---|---|
| Главная задача | Разобрать уже полученные данные | Получить данные из внешнего источника |
| Типичный вход | HTML, XML, JSON, CSV, лог, текст | URL страницы, API, список ссылок, сайт |
| Типичный выход | Структура с полями и элементами | Готовый набор собранных данных |
| Зависимость от сайта | Может работать без сайта, например с файлом | Обычно зависит от сайта, сервера или API |
| Риски | Ошибки разбора, неверная структура, потеря полей | Блокировки, лимиты, нарушение правил сайта, юридические риски |
Главное отличие связано с ролью, а не с языком программирования или библиотекой. Парсер превращает сырой материал в удобную структуру. Скрейпер добывает материал и управляет всем процессом сбора. Поэтому фраза «парсер сайта» в бытовой речи обычно означает скрейпер, который ещё и парсит HTML.
Пример с интернет-магазином хорошо показывает границу. Скрейпер открывает страницу товара, получает HTML, ждёт ответа от сервера и передаёт код дальше. Парсер находит в HTML название товара, цену, наличие, артикул и характеристики. Затем скрейпер сохраняет результат и переходит к следующей странице. Если убрать парсер, скрейпер получит только сырой HTML. Если убрать скрейпер, парсеру просто нечего будет разбирать, если данные заранее не лежат в файле.
Парсер не всегда связан с вебом. Программа, которая читает банковскую выписку в CSV и раскладывает операции по категориям, тоже парсер. Сервис, который извлекает поля из логов, тоже использует парсер. Разбирать JSON-ответ от легального API – тоже парсинг. Скрейпинг начинается там, где программа автоматически забирает данные с внешней страницы или сервиса, особенно когда сайт изначально рассчитан на человека, а не на машинную выгрузку.
Если у сервиса есть официальный API, лучше начать с него: такой способ стабильнее, быстрее и снимает большинство рисков. Скрейпинг имеет смысл, когда API нет, неполный или данные доступны только в HTML.
Важно учитывать и правила сайта. Файл robots.txt сообщает краулерам, какие адреса владелец просит не трогать. Google неоднократно подчёркивал, что robots.txt управляет тем, что краулер обходит, но не гарантирует исключения страницы из поисковой выдачи. Стандарт RFC 9309 уточняет, что протокол носит рекомендательный характер и соблюдение правил robots.txt добровольно для краулеров – это не механизм контроля доступа, а сигнал о намерениях владельца.
Можно ли назвать скрейпер парсером?
В разговорной речи так часто делают, но технически формулировка неточная. Скрейпер может включать парсер, но скрейпер шире: он получает данные с сайта и управляет всем процессом сбора.
Парсинг всегда связан с сайтами?
Нет. Парсинг нужен при работе с файлами, логами, таблицами, JSON, XML, электронными письмами и другими форматами. Сайт является только одним из возможных источников данных.
Скрейпинг законен?
Зависит от данных, способа сбора, правил сайта и целей. Нельзя собирать закрытые данные, обходить защиту, нарушать авторские права и условия доступа. Отдельный вопрос – пользовательское соглашение (Terms of Service) сайта: его нарушение не всегда влечёт уголовную ответственность, но может иметь гражданско-правовые последствия. В России актуальны нормы о персональных данных (ФЗ-152), коммерческой тайне и авторском праве. Статья 272 УК РФ о неправомерном доступе к компьютерной информации применима в случаях, когда скрейпер преодолевает технические средства защиты или получает доступ к закрытым ресурсам без разрешения – но не при сборе открытых публичных данных. В неочевидных случаях стоит проконсультироваться с юристом.
Что лучше использовать, API или скрейпер?
Если у сервиса есть официальный API, начните с него. Такой способ обычно стабильнее, быстрее и безопаснее для обеих сторон. Скрейпер имеет смысл, когда API нет или когда владелец данных прямо допускает автоматический сбор.
Вывод
Парсер нужен, чтобы понять структуру данных, скрейпер – чтобы автоматически их получать. Скрейпер и парсер часто работают в связке. Начните с проверки наличия официального API и файла robots.txt – это сэкономит время и снизит риски ещё до написания первой строки кода.


