Un scraper pe laptop e în regulă până când îl închizi la mijlocul rulării, IP-ul de acasă e limitat sau vrei ca aceeași sarcină să ruleze în fiecare oră, fie că ești treaz, fie că nu. Mutarea pe un VPS le rezolvă pe toate trei: rămâne pornit 24/7, nu-ți arde reputația IP-ului de acasă, iar cron sau un timer systemd îl rulează după program, fără tine. Iată cum configurezi asta, de cât server ai nevoie de fapt și părțile pe care majoritatea ghidurilor le sar pe tăcute.
De ce un VPS bate mașina ta pentru asta
- 24/7 și programat. Un scraper care rulează din oră în oră are nevoie de un host mereu pornit. Un laptop nu e.
- IP-ul de acasă rămâne curat. Scrapingul de acasă înseamnă că IP-ul tău rezidențial încasează limitările și blocările. Fă-l de pe un server și propria conexiune rămâne neatinsă.
- Stabilitate. Fără repaus, fără căderi de Wi-Fi în mijlocul unui crawl, o conexiune de centru de date constantă și un loc unde să aduni rezultatele.
Stackul și de ce are nevoie fiecare parte
Două categorii de greutate foarte diferite, iar alegerea planului greșit risipește bani sau înfometează sarcina:
- httpx / requests (Python) — pentru API-uri, endpointuri JSON și HTML static. E ușor: procesul stă în zeci de megaocteți, e legat de rețea, nu de CPU. Un Nano de $3 (2 vCPU / 1 GB) îl rulează comod, chiar și cu concurență prin
asyncio. - Playwright / Chromium headless — pentru site-urile randate cu JavaScript, unde îți trebuie un browser real. Ăsta e cel greu. Chromium headless are aproximativ 300–400 MB per instanță de browser, plus 100–200 MB per context/tab deschis, plus runtime-ul tău. Bugetează:
- Micro de $5 (2 vCPU / 2 GB) — unul sau două contexte de browser deodată.
- Small de $8 (4 vCPU / 4 GB) — mai multe contexte în paralel sau pagini mai grele.
Regula practică: codul tău nu e aproape niciodată gâtul de sticlă — Chromium este. Dimensionează pentru browser, nu pentru scraper.
Programarea: timer systemd în loc de cron
Cron merge, dar un timer systemd e alegerea implicită mai bună pe un server pe care îl întreții: loguri prin journalctl, recuperare dacă mașina era oprită și o stare per rulare pe care o poți verifica. O configurare minimă:
# /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 # watch runs
Persistent=true e ce nu poate face cron: dacă serverul era oprit la ora rulării, sarcina se declanșează o dată la pornire, în loc să fie sărită pe tăcute.
Unde ajung rezultatele
Păstrează-l simplu și potrivit volumului: SQLite pentru date structurate pe care le vei interoga (un fișier, zero configurare), CSV pentru descărcări tabelare rapide sau un object store compatibil S3 când rezultatele depășesc mașina sau le vrei în afara serverului. Rotește-ți logurile (logrotate sau limitele journald), ca un scraper vorbăreț să nu umple încet discul.
Partea cinstită: IP-ul de ieșire și reputația
Ăsta e detaliul care decide dacă scraperul tău merge o săptămână sau e blocat din prima zi.
Pe un plan NAT, traficul spre exterior iese printr-un IP folosit și de alți clienți. Reputația acelui IP nu e doar a ta — un vecin care face scraping pe aceeași țintă poate face adresa limitată înainte să trimiți tu o singură cerere. În regulă pentru scraping ușor, ocazional; o problemă la volum.
Un IP dedicat îți dă propria reputație de ieșire — comportamentul nimănui altcuiva nu o afectează. Dar taie în ambele direcții: scrapingul agresiv îți arde propriul IP curat, iar odată ce o țintă îl blochează, e blocat. Un IP dedicat înseamnă control, nu imunitate.
La scară reală, ai nevoie de pooluri externe de proxy-uri. Niciun IP singular — al mai multora sau dedicat — nu poate împărți încărcarea pe multe adrese, ceea ce cere scrapingul serios pe ținte care limitează după IP. Proxy-urile sunt un strat generic, de la terți, pe care îl adaugi deasupra; VPS-ul rulează scraperul, poolul de proxy-uri dă adresele. Nu te aștepta ca un singur IP de server să facă treaba unui pool de proxy-uri.
Etica și politica de utilizare — nu sunt opționale
Scrapingul trăiește într-o zonă gri, juridic și etic, așa că privește lucid:
- Respectă limitele de rată și robots.txt. Limitează-ți cererile. Un scraper politicos arată ca trafic; unul nepoliticos arată ca un atac.
- Nu-ți bombarda ținta. Să lovești un site până cade nu e scraping, e refuz al serviciului — și aici încalcă politica de utilizare acceptabilă, ceea ce duce la oprirea serviciului.
- Colectează doar ce ai voie. Colectarea legală, permisă, de date e linia. Treci de ea și răspunderea e a ta.
Concluzia
Un VPS e casa potrivită pentru un scraper: mereu pornit, programat și departe de IP-ul de acasă. Potrivește planul cu stackul — Nano de $3 pentru httpx, Micro de $5 până la Small de $8 pentru Playwright —, programează cu un timer systemd și fii cinstit despre IP-uri: un IP de ieșire folosit de mai mulți își împarte reputația, unul dedicat e al tău de construit sau de ars, iar scara reală înseamnă pooluri de proxy-uri. Închide întâi mașina cu lista de securitate pentru un VPS nou, dimensioneaz-o corect cu ghidul de dimensionare VPS, iar dacă intimitatea plății fără card contează, analiza VPS-ului anonim e versiunea cinstită. Fă scraping responsabil — politica de utilizare acceptabilă e reală.
Gata de scraping? Un plan Micro e un început solid; crawlurile mari, concurente, merg mai bine pe Small.
Comentarii
Încă nu există comentarii. Fii primul.