Парсинг на Python: когда хватит своего скрипта, а когда нужна подписка
Опубликовано 26 октября 2026
Запрос «python парсинг» обычно вводят в двух ситуациях. Разработчик или студент хочет понять, как это работает. Владелец бизнеса или аналитик прикидывает, не проще ли написать скрипт самому, чем платить подрядчику. Эта статья для обоих: сначала рабочий пример, потом расчёт, где скрипт перестаёт быть дешёвым.
Границы разбора. Код ниже рассчитан на открытые страницы, которые видит любой посетитель без входа. Мы не показываем обход защиты, капчи и авторизации, и сами таких задач не берём. Что такое парсинг в целом и чем он отличается от скрапинга, рассказано в статье «Что такое парсинг простыми словами».
Из чего состоит парсер на Python
Почти любой парсер делает четыре вещи: проверяет, можно ли ходить по адресу, получает страницу, находит в ней нужные поля и сохраняет результат. Для каждого шага в Python есть готовый инструмент.
| Шаг | Инструмент | Когда нужен |
|---|---|---|
| Проверить robots.txt | urllib.robotparser (встроен в Python) |
всегда, до первого запроса |
| Получить страницу | requests |
статичные страницы и JSON |
| Разобрать HTML | BeautifulSoup или lxml |
когда данные в разметке |
| Разобрать JSON | модуль json или response.json() |
когда сайт отдаёт данные отдельным запросом |
| Открыть страницу браузером | Playwright или Selenium |
когда данные появляются только после JavaScript |
| Сохранить | модуль csv, pandas, база данных |
всегда |
Браузер без окна заметно медленнее и тяжелее обычного запроса. Поэтому сначала стоит
открыть в браузере инструменты разработчика и посмотреть, не приходят ли данные
отдельным JSON-запросом: тогда хватает requests.

Пример: вежливый парсер открытого каталога
Ниже скрипт, который собирает названия и цены из каталога. Адрес и CSS-классы условные: у каждого сайта они свои. Важны три вещи, без которых мы такой код не запускаем: проверка robots.txt, понятный User-Agent и пауза между запросами.
import csv
import time
import urllib.robotparser
import requests
from bs4 import BeautifulSoup
SITE = "https://example.ru"
AGENT = "price-research-bot/1.0 (+mailto:you@example.ru)"
robots = urllib.robotparser.RobotFileParser(SITE + "/robots.txt")
robots.read()
delay = robots.crawl_delay(AGENT) or 5 # секунд между запросами
rows = []
for page in range(1, 6):
url = f"{SITE}/catalog/?page={page}"
if not robots.can_fetch(AGENT, url):
print("Закрыто в robots.txt:", url)
break
r = requests.get(url, headers={"User-Agent": AGENT}, timeout=30)
if r.status_code in (429, 503): # сайт просит притормозить
time.sleep(delay * 10)
continue
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
for card in soup.select(".product-card"):
rows.append({
"name": card.select_one(".title").get_text(strip=True),
"price": card.select_one(".price").get_text(strip=True),
"url": url,
})
time.sleep(delay)
with open("prices.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=["name", "price", "url"])
w.writeheader()
w.writerows(rows)
Что здесь стоит пояснить:
RobotFileParserчитает правила сайта,can_fetchотвечает, разрешён ли адрес для вашего User-Agent,crawl_delayвозвращает задержку, если владелец её указал. Всё это есть в стандартной библиотеке, ставить ничего не нужно.- Стандарт robots.txt (RFC 9309) прямо говорит, что эти правила не являются защитой доступа. Это просьба владельца, и выполнять её разумно: агрессивный сбор быстрее всего приводит к блокировке.
- Пять секунд по умолчанию — наше правило для небольших сайтов, закон такой цифры не задаёт. Ответы 429 и 503 означают, что сайт не справляется или ограничивает частоту.
- В URL записываем адрес, откуда взята строка. Без него через месяц не проверить, откуда цифра.
Если сайт отдаёт JSON
Многие каталоги подгружают товары отдельным запросом. В браузере это видно на вкладке «Сеть» в инструментах разработчика. Тогда разбор HTML не нужен:
r = requests.get(SITE + "/api/catalog?page=1", headers={"User-Agent": AGENT}, timeout=30)
for item in r.json()["items"]:
print(item["name"], item["price"])
Такой запрос тоже должен быть открытым: без токена из чужой учётной записи и без подделки ключей. Если у сайта есть официальный API, лучше начать с него. Когда что выбрать, мы разбирали в статье «Парсинг или API: что выбрать».
Что ломается после первого запуска
Скрипт выше работает в день написания. Дальше начинается сопровождение, и именно оно определяет реальную цену своего парсера. Вот что мы чаще всего видим в работе:
- Вёрстка меняется. Класс
.priceпереименовали, и скрипт тихо собирает пустые строки. Нужна проверка: если доля пустых полей выросла, сбор должен остановиться и сообщить. - Данные начинает грузить JavaScript. Вчера цена была в HTML, сегодня её
подставляет скрипт, и
requestsеё больше не видит. - Цены в разных форматах. «1 290 ₽», «1290 руб.», «от 1 290». Чистка часто занимает больше времени, чем сам сбор.
- Нужна история. Одна выгрузка отвечает на вопрос «сколько сейчас». Чтобы видеть динамику, нужен запуск по расписанию, база и сравнение с прошлым снимком.
- Сбой в неудобное время. Сервер перезагрузился, сайт отвечал медленно, место на диске кончилось. Кто-то должен заметить и перезапустить.
Подробнее о том, как отличать живой сервис от разового скрипта, — в статье «Парсер сайтов: как выбрать».
Свой скрипт или подписка: как посчитать
Сравнивать стоит часы вместе с деньгами. Мы считаем так: время на первую версию плюс время на сопровождение за год, умноженное на стоимость часа того, кто будет это делать. Если получилось больше годовой подписки, скрипт дороже, даже если «бесплатный».

| Ситуация | Что обычно выгоднее |
|---|---|
| Разовая выгрузка с одного сайта, есть разработчик | свой скрипт |
| Учебная задача, исследование, курсовая | свой скрипт |
| 1–2 простых сайта раз в неделю, сбой не критичен | свой скрипт с проверкой пустых полей |
| 5+ сайтов, ежедневно, данные идут в цены | подписка или разработка с сопровождением |
| Нужна история за месяцы и оповещения | подписка |
| Никто в команде не пишет на Python | разовая выгрузка у подрядчика |
Это наш вывод по опыту, правилом он не является. Бывает, что у компании есть свой аналитик, и тогда даже десять сайтов разумно держать у себя.
Где проходят границы
Технически Python позволяет собрать почти всё. Юридически и по нашим правилам — нет. Коротко о том, чего мы не делаем и чего не советуем:
- не собираем персональные данные людей: имена, телефоны, профили;
- не обходим авторизацию, капчу и техническую защиту сайта;
- не копируем базу сайта целиком, чтобы сделать на ней свой сервис;
- не нагружаем сайт так, что он начинает отвечать с ошибками.
Почему это важно и какие статьи закона здесь применяются, разобрано в статье «Законен ли парсинг сайтов».
Как с этим работаем мы
Мы в Datamill пишем сборщики на Python и держим их в работе: проверяем пустые поля, сравниваем с прошлым снимком, сообщаем, если источник изменился. Если вам нужен разовый файл, это парсинг сайтов на заказ от 5 000 ₽. Если нужно следить за ценами каждый день, это мониторинг цен конкурентов от 8 000 ₽ в месяц. Если хотите писать сами, код выше — нормальная отправная точка.
Частые вопросы
Какие библиотеки Python нужны для парсинга?
Для статичных страниц обычно хватает requests (запросы) и BeautifulSoup или lxml (разбор HTML). Если сайт отдаёт данные в JSON, достаточно requests и встроенного модуля json. Для страниц, которые собирает JavaScript, нужен браузер без окна, например Playwright или Selenium. Для robots.txt есть встроенный модуль urllib.robotparser.
Обязательно ли соблюдать robots.txt?
Это просьба владельца сайта, защитой доступа по RFC 9309 он не считается. Мы её соблюдаем: закрытый раздел не собираем и ищем другой источник. О том, как это связано с законом, — в статье «Законен ли парсинг сайтов».
Какую паузу ставить между запросами?
Единой нормы нет. Если в robots.txt указан Crawl-delay, мы берём его. Если нет, начинаем с нескольких секунд между запросами к одному сайту и следим за ответами: коды 429 и 503 означают, что нужно замедлиться. Это наше правило, закон такой цифры не задаёт.
Можно ли парсить сайт под своим логином?
Технически да, но тогда вы собираете данные из закрытой части и отвечаете по пользовательскому соглашению. Обход авторизации и чужие учётные записи мы не используем совсем. В статье код только для открытых страниц.
Сколько стоит, если не писать скрипт самим?
Разовая выгрузка у Datamill стоит от 5 000 ₽, мониторинг цен по подписке — от 8 000 ₽ в месяц. Точная цена зависит от числа сайтов и полей, её называем после разбора задачи. Факторы цены — в разделе «Сколько стоит парсинг сайта».
Источники
Проверено 26 октября 2026 года.
- Python, модуль urllib.robotparser — docs.python.org
- RFC 9309 «Robots Exclusion Protocol» — rfc-editor.org
- Requests, документация — requests.readthedocs.io
- Beautiful Soup, документация — crummy.com
- Playwright для Python — playwright.dev/python
- HTTP 429 Too Many Requests, RFC 6585 — rfc-editor.org
- Расчёт «скрипт или подписка» и паузы — наши, по опыту работы
- Цены: страницы услуг «Парсинг сайтов» и «Мониторинг цен конкурентов»
Читайте также
Что такое парсинг простыми словами
Парсинг — это когда программа открывает страницы сайта, находит на них нужные поля и складывает их в таблицу. Разбираем, как это устроено, чем парсинг отличается от скрапинга и API, что с ним делают компании и где проходят его границы.
Облачный парсер, программа или заказ: как выбрать способ сбора данных
Парсер можно взять в облаке по подписке, поставить программой на компьютер, написать самому или заказать готовые данные. Каждый способ подходит своей задаче, и у каждого есть место, где он ломается. Разбираем, как выбрать, и где проходят границы, которые не зависят от инструмента.
Парсинг или API: что выбрать для сбора данных
Если у сайта есть API, парсинг кажется лишним, а если API нет, он единственный вариант. На деле всё сложнее: API нередко отдаёт только ваши данные, у официальной выгрузки бывают лимиты, а парсинг страниц ограничен законом. Разбираем, как выбрать способ, на шести примерах из официальной документации.
Чем занимаемся
Услуги
Telegram-боты и мини-приложения
Бот хорош как почтальон: разносит приглашения, принимает «Иду» и «Не могу», напоминает. Хранить анкеты и личные данные он не должен — для этого есть мини-приложение и ваш сервер в России.
Мониторинг цен
Не разовая выгрузка, а постоянное наблюдение. Вы видите не сегодняшнюю цену, а кривую за месяцы — и узнаёте об изменении в тот же час.
Аудит цен бренда
Один срез вместо догадок: сколько стоит ваш товар у вас, у других продавцов и у частных лиц — и какая из цен на карточке настоящая.