Граббер (англ. grabber, от grab — «захватывать») — это скрипт или программа, которая автоматически скачивает данные с веб-страниц: тексты, цены, изображения, ссылки. Проще говоря, граббер делает за вас рутину «зайти на страницу и сохранить нужное», только на сотнях и тысячах страниц подряд.
Содержание
Термин часто путают с парсером и краулером, а еще — применяют на грани закона. Ниже разберу, что именно делает граббер, чем он отличается от соседних инструментов, как устроен пошагово, покажу рабочий пример на Python и отдельно — какие правовые и этичные рамки нужно соблюдать, чтобы сбор данных не превратился в проблему.
Что делает граббер
Задача граббера — собрать сырые данные из открытого источника и сложить их в удобное место: файл, таблицу, базу данных или прямо в другой сайт. Он не думает о смысле данных, его дело — быстро и без ручного труда «захватить» то, что вы указали.
Типовые сценарии, где граббер экономит время:
- наполнение интернет-магазина: перенести карточки товаров с описаниями и фото, когда их тысячи;
- сбор цен и ассортимента конкурентов для анализа (мониторинг цен);
- агрегация: собрать новости, вакансии или объявления из нескольких источников в одном месте;
- сбор данных для аналитики и обучения моделей: отзывы, характеристики, статистика;
- регулярное обновление меняющихся данных — например, курсов валют или прогноза погоды.
Важная оговорка: граббер копирует данные «как есть». Если в источнике опечатки, лишние пробелы или ошибки разметки — все это переедет к вам без изменений. Поэтому собранные данные почти всегда нужно чистить и проверять, а не выкладывать напрямую.
Граббер, парсер и краулер: в чем разница
Эти три слова постоянно смешивают, потому что в реальных инструментах они работают вместе. Но задачи у них разные, и их полезно развести.
| Инструмент | Задача | Что на входе | Что на выходе |
|---|---|---|---|
| Краулер (crawler, «паук») | Обойти сайт по ссылкам и найти адреса страниц | Стартовый URL | Список URL для обработки |
| Граббер (grabber) | Скачать содержимое страниц по известным адресам | Список URL | Сырой HTML, файлы, картинки |
| Парсер (parser) | Разобрать скачанное и извлечь нужные поля | Сырой HTML/текст | Структурированные данные (цена, название) |
Проще всего запомнить по цепочке одной задачи «собрать каталог товаров»: краулер находит адреса всех карточек, граббер скачивает их HTML, парсер достает из этого HTML цену и название и складывает в таблицу.
На практике границы размыты: библиотеки и готовые сервисы обычно совмещают все три роли, поэтому «чистый» граббер встречается редко. Но понимать разделение полезно — оно подсказывает, какая часть процесса дает сбой, если результат не тот, что ожидали.
Как устроен граббер: этапы работы
Работу почти любого граббера можно разложить на четыре шага. Это не жесткий стандарт, а удобная модель — в конкретных инструментах шаги могут сливаться или менять порядок.
- Запрос страницы. Граббер отправляет HTTP-запрос по адресу и получает ответ сервера — обычно HTML-код страницы. На этом шаге задают заголовки запроса и паузы между обращениями.
- Получение и сохранение сырых данных. Ответ сохраняется целиком: HTML, а при необходимости — картинки, файлы, медиа по ссылкам со страницы.
- Извлечение нужного. Из сырого HTML выбирают только целевые элементы: заголовки, цены, описания, ссылки. Формально это уже работа парсера, но в большинстве инструментов она встроена в тот же процесс.
- Выгрузка результата. Отобранные данные сохраняют в нужном формате — CSV, JSON, таблица базы данных или запись на другой сайт.
Отдельный нюанс — страницы, которые подгружают контент через JavaScript уже в браузере. Обычный HTTP-запрос вернет пустой «каркас» без данных. Для таких сайтов нужен инструмент, который умеет выполнять JavaScript (об этом ниже).
Пример: граббер на Python
Написать граббер можно почти на любом языке, но популярный выбор для веба — Python: у него простой синтаксис и готовые библиотеки под каждый шаг. Базовый набор такой:
requests— отправка HTTP-запросов и загрузка страниц;BeautifulSoup(пакетbeautifulsoup4) — разбор HTML и выборка элементов;lxml— быстрый движок разбора для больших объемов;Scrapy— каркас для крупных проектов, где нужны краулер, граббер и парсер вместе;SeleniumилиPlaywright— управление настоящим браузером для страниц с JavaScript.
Начну с полного примера, который можно скопировать и запустить без установки библиотек и без интернета: он разбирает готовый фрагмент HTML средствами стандартной библиотеки Python. Так виден сам принцип извлечения данных.
from html.parser import HTMLParser
# Фрагмент HTML, который граббер получил бы со страницы каталога
html_doc = (
'<div class="card"><h2 class="name">Клавиатура</h2>'
'<span class="price">2490</span></div>'
'<div class="card"><h2 class="name">Мышь</h2>'
'<span class="price">990</span></div>'
)
class CardGrabber(HTMLParser):
def __init__(self):
super().__init__()
self.items = []
self.cur = {}
self.grab = None
def handle_starttag(self, tag, attrs):
cls = dict(attrs).get("class", "")
if cls == "name":
self.grab = "name"
elif cls == "price":
self.grab = "price"
def handle_data(self, data):
if self.grab:
self.cur[self.grab] = data.strip()
if self.grab == "price":
self.items.append(self.cur)
self.cur = {}
self.grab = None
g = CardGrabber()
g.feed(html_doc)
for it in g.items:
print(it["name"], "-", it["price"], "руб.")
Вывод в консоли:
Клавиатура - 2490 руб.
Мышь - 990 руб.
В реальном проекте так вручную обычно не разбирают — берут requests для загрузки и BeautifulSoup для выборки по CSS-селекторам. Тот же результат получается короче и читаемее:
import requests
from bs4 import BeautifulSoup
# Скачиваем страницу каталога и достаем карточки товаров
url = "https://example.com/catalog"
headers = {"User-Agent": "MyGrabber/1.0 (+https://example.com/contact)"}
resp = requests.get(url, headers=headers, timeout=10)
resp.raise_for_status() # прервет выполнение, если сервер вернул ошибку
soup = BeautifulSoup(resp.text, "html.parser")
for card in soup.select("div.card"):
name = card.select_one(".name").get_text(strip=True)
price = card.select_one(".price").get_text(strip=True)
print(name, "-", price, "руб.")
Этот вариант требует установки библиотек (pip install requests beautifulsoup4) и доступа в интернет, а адрес example.com/catalog — условный, замените на реальный. Логика та же: загрузить страницу, найти нужные элементы, вывести данные.
Правовые и этичные рамки сбора данных
Технически граббер написать несложно, но сбор чужих данных — это зона, где легко нарушить правила. Автоматический доступ к сайту не делает данные «ничьими». Перед запуском стоит проверить несколько вещей.
Файл robots.txt. Это рекомендация владельца сайта о том, какие разделы можно обходить роботам. Юридической силы у него нет, но игнорировать его — плохой тон, а иногда и повод для блокировки. Проверить правила можно стандартной библиотекой Python:
from urllib.robotparser import RobotFileParser
rp = RobotFileParser()
rp.parse([
"User-agent: *",
"Disallow: /admin/",
"Allow: /catalog/",
])
print(rp.can_fetch("*", "https://example.com/catalog/item1"))
print(rp.can_fetch("*", "https://example.com/admin/users"))
Вывод:
True
False
Условия использования сайта (Terms of Service). Многие сайты прямо запрещают автоматический сбор данных в пользовательском соглашении. Нарушение ToS — это уже договорный, а не только этичный вопрос.
Персональные данные. Имена, телефоны, email, адреса подпадают под закон о персональных данных (в России — 152-ФЗ). Собирать и хранить их без законного основания нельзя, даже если технически они доступны.
Авторские права. Тексты, фотографии и другой контент защищены авторским правом. Скопировать их граббером и разместить у себя — нарушение, отдельная история от самого факта сбора.
Нагрузка на сайт. Поток запросов без пауз похож на атаку и может положить чужой сервер. Этичный граббер делает паузы между запросами, представляется в заголовке User-Agent и не собирает больше, чем нужно.
Хорошая практика — вместо парсинга проверить, нет ли у источника официального API: он отдает данные легально, в готовом формате и без риска блокировки. Например, погоду или курсы валют почти всегда лучше брать через API, а не собирать со страниц.
Выводы
Граббер — это инструмент автоматического сбора данных с сайтов, который экономит часы ручной работы там, где нужно собрать много однотипной информации. Он отвечает за скачивание содержимого; поиск адресов — задача краулера, а извлечение конкретных полей — парсера, и в реальных инструментах эти роли обычно совмещены.
Собранные данные почти всегда требуют проверки и очистки. А главное — сбор чужих данных ограничен законом и правилами сайтов: robots.txt, условиями использования, защитой персональных данных и авторских прав. Технически простой граббер быстро превращается в проблему, если игнорировать эти рамки.
Где применить на практике
Освойте тему на практике
Чтобы написать собственный граббер, нужна база Python: работа с HTTP-запросами, обработка текста, структуры данных, установка библиотек. С этого фундамента дальше легко перейти к requests, BeautifulSoup и Scrapy. Освоить основы с нуля и на практике помогает базовый курс Python-разработки в Otus — от синтаксиса до первых работающих скриптов.
Освойте тему на практике
Если хотите сначала посмотреть, как устроено обучение, и задать вопросы преподавателям — записывайтесь на бесплатные открытые уроки по программированию и анализу данных.
Смежные темы: сетевые протоколы и HTTP, работа с XML, сбор данных через погодный API.
FAQ
Граббер — это легально?
Сам инструмент законен. Незаконным сбор делают конкретные действия: обход прямого запрета в условиях сайта, сбор персональных данных без основания, копирование защищенного авторским правом контента. Открытые обезличенные данные при соблюдении robots.txt и разумной нагрузки собирать обычно допустимо, но спорные случаи стоит проверять с юристом.
Чем граббер отличается от парсера простыми словами?
Граббер отвечает на вопрос «скачать страницу целиком», парсер — «достать из скачанного конкретные поля». Граббер приносит сырье, парсер превращает его в структурированную таблицу. В большинстве библиотек обе роли выполняет один и тот же код.
Почему граббер не видит данные, которые есть на странице в браузере?
Скорее всего, сайт подгружает эти данные через JavaScript уже после загрузки HTML. Обычный HTTP-запрос получает только исходный «каркас» без них. В таких случаях используют Selenium или Playwright — они управляют настоящим браузером и дожидаются, пока скрипты отрисуют контент.



