Скрейпер на ноутбуке хорош ровно до момента, когда вы закроете его посреди прогона, домашний IP словит лимит, или вы захотите, чтобы задача шла каждый час независимо от того, спите вы или нет. Переезд на VPS решает всё три: он онлайн 24/7, не жжёт репутацию домашнего IP, а cron или systemd-таймер запускают его по расписанию без вас. Разберём, как это настроить, сколько сервера реально нужно и что большинство гайдов тихо пропускает.
Почему VPS лучше вашей машины
- 24/7 и по расписанию. Скрейперу, что ходит ежечасно, нужен всегда включённый хост. Ноутбук — нет.
- Домашний IP остаётся чистым. Скрейпинг из дома означает, что лимиты и блоки ловит ваш домашний IP. С сервера ваше собственное подключение остаётся нетронутым.
- Стабильность. Ни сна, ни обрывов wifi посреди краула, ровный дата-центровый канал и место для накопления результатов.
Стек и что каждой части нужно
Две очень разные весовые категории, и неверный тариф либо тратит деньги, либо душит задачу:
- httpx / requests (Python) — для API, JSON-эндпоинтов и статичного HTML. Лёгкий: процесс живёт в десятках мегабайт, упирается в сеть, не в CPU. Nano за $3 (1 vCPU / 1 ГБ) тянет это спокойно, даже с конкурентностью через
asyncio. - Playwright / headless Chromium — для сайтов с JavaScript-рендерингом, где нужен настоящий браузер. Вот это тяжёлое. Headless Chromium — примерно 300–400 МБ на инстанс браузера, плюс 100–200 МБ на открытый контекст/вкладку, плюс ваш рантайм. Бюджет:
- Micro за $5 (2 vCPU / 2 ГБ) — один-два контекста браузера одновременно.
- Small за $8 (4 vCPU / 4 ГБ) — несколько параллельных контекстов или тяжёлые страницы.
Правило: ваш код почти никогда не узкое место — Chromium узкое. Считайте под браузер, не под скрейпер.
Расписание: systemd-таймер вместо cron
cron работает, но systemd-таймер — лучший дефолт на сервере, который вы обслуживаете: логи через journalctl, автодогон если сервер был выключен, и статус каждого запуска. Минимальная настройка:
# /etc/systemd/system/scrape.service
[Unit]
Description=Run scraper
[Service]
Type=oneshot
User=scraper
WorkingDirectory=/home/scraper/job
ExecStart=/home/scraper/job/venv/bin/python scrape.py
# /etc/systemd/system/scrape.timer
[Unit]
Description=Hourly scrape
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl enable --now scrape.timer
journalctl -u scrape.service -f # смотреть запуски
Persistent=true — то, чего cron не умеет: если сервер был выключен в момент запуска, задача выполнится один раз при загрузке, а не молча пропустится.
Куда складывать результаты
Проще и по объёму: SQLite для структурированных данных, которые будете запрашивать (один файл, ноль настройки), CSV для быстрых табличных выгрузок или S3-совместимое объектное хранилище, когда результаты перерастают сервер или их хочется держать вне его. Ротируйте логи (logrotate или лимиты journald), чтобы болтливый скрейпер не забил диск.
Честная часть: исходящий IP и репутация
Именно эта деталь решает, проработает ли ваш скрейпер неделю или словит блок на первый день.
На NAT-тарифе исходящий трафик делит один egress-IP с другими клиентами. Репутация этого IP общая — сосед, скрейпящий ту же цель, может подвести адрес под лимит раньше, чем вы отправите первый запрос. Годится для лёгкого редкого скрейпинга; на объёме — риск.
Выделенный IP даёт собственную репутацию исходящего — поведение других на неё не влияет. Но это палка о двух концах: агрессивный скрейпинг сжигает ваш собственный чистый IP, и раз цель его заблокировала — он заблокирован. Выделенный IP — это контроль, не иммунитет.
На реальном масштабе нужны внешние пулы прокси. Ни один IP — общий или выделенный — не размажет нагрузку по многим адресам, а именно это требуется серьёзному скрейпингу против целей с лимитом по IP. Прокси — сторонний слой, который вы добавляете сверху: VPS гоняет скрейпер, пул прокси даёт адреса. Не ждите, что один IP сервера сделает работу пула прокси.
Этика и AUP — не опционально
Скрейпинг живёт в правовой и этической серой зоне, поэтому без иллюзий:
- Уважайте лимиты и robots.txt. Ограничивайте запросы. Вежливый скрейпер выглядит как трафик; невежливый — как атака.
- Не кладите цель. Долбить сайт, пока он не упадёт, — не скрейпинг, а отказ в обслуживании; это нарушение правил использования, ведущее к прекращению услуги.
- Скрейпьте только то, что разрешено. Легальный, допустимый сбор данных — граница. Перешли её — это на вас.
Итог
VPS — правильный дом для скрейпера: всегда онлайн, по расписанию и вне домашнего IP. Подбирайте тариф под стек — Nano за $3 для httpx, Micro за $5 – Small за $8 для Playwright — планируйте systemd-таймером и будьте честны про IP: общий egress делит репутацию, выделенный IP ваш — строить или жечь, а реальный масштаб означает пулы прокси. Сначала закройте сервер чек-листом безопасности, подберите размер по гайду по подбору VPS, а если важна приватность оплаты без карты — разбор анонимного VPS честная версия. Скрейпьте ответственно — AUP реален.