Скрейпер на ноутбуці добрий рівно до моменту, коли ви закриєте його посеред прогону, домашній 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 реальний.