یک اسکرپر روی لپتاپ شما خوب است تا زمانی که وسط اجرا ببندیدش، IP خانهتان محدودیت نرخ بخورد، یا بخواهید همان کار هر ساعت اجرا شود، چه بیدار باشید چه نه. انتقالش به یک VPS هر سه را حل میکند: ۲۴/۷ روشن میماند، اعتبار IP خانهتان را نمیسوزاند، و cron یا یک تایمر systemd آن را طبق برنامه بدون شما اجرا میکند. اینجا میبینید چطور آن را راهاندازی کنید، واقعاً به چه مقدار سرور نیاز دارید، و بخشهایی که بیشتر راهنماها بیسروصدا از رویشان رد میشوند.
چرا یک VPS برای این کار از ماشین شما بهتر است
- ۲۴/۷ و زمانبندیشده. اسکرپری که هر ساعت اجرا میشود به میزبانی نیاز دارد که همیشه روشن باشد. یک لپتاپ نیست.
- IP خانهتان تمیز میماند. اسکرپ کردن از خانه یعنی IP خانگی شما محدودیتهای نرخ و مسدودسازیها را میخورد. از یک سرور انجامش دهید و اتصال خودتان دستنخورده میماند.
- پایداری. بدون خواب، بدون قطع وسط خزش، یک اتصال پایدار دیتاسنتری، و جایی برای انباشتن نتایج.
پشته، و اینکه هر بخش به چه چیزی نیاز دارد
دو ردهی وزنیِ بسیار متفاوت، و انتخاب پلن اشتباه یا پول را هدر میدهد یا کار را گرسنه نگه میدارد:
- httpx / requests (Python) — برای APIها، اندپوینتهای JSON، و HTML ایستا. این سبک است: فرآیند در حد چند ده مگابایت جا میگیرد، محدود به شبکه است نه CPU. یک Nano سه دلاری (۱ vCPU / ۱ گیگابایت) این را با آسودگی اجرا میکند، حتی با همزمانی از طریق
asyncio. - Playwright / Chromium headless — برای سایتهایی که با JavaScript رندر میشوند و به یک مرورگر واقعی نیاز دارید. این سنگین است. Chromium headless تقریباً ۳۰۰ تا ۴۰۰ مگابایت بهازای هر نمونهی مرورگر است، بهعلاوهی ۱۰۰ تا ۲۰۰ مگابایت بهازای هر کانتکست/تبِ باز، بهعلاوهی رانتایم شما. بودجهبندی:
- Micro پنج دلاری (۲ vCPU / ۲ گیگابایت) — یک یا دو کانتکست مرورگر همزمان.
- Small هشت دلاری (۴ vCPU / ۴ گیگابایت) — چند کانتکست موازی، یا صفحات سنگینتر.
قاعدهی سرانگشتی: کد شما تقریباً هرگز گلوگاه نیست — 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، ترافیک خروجی یک IP خروجی را با مشتریان دیگر به اشتراک میگذارد. اعتبار آن IP مشترک است — همسایهای که همان هدف را اسکرپ میکند میتواند باعث شود آدرس محدودیت نرخ بخورد، پیش از آنکه شما حتی یک درخواست بفرستید. برای اسکرپینگ سبک و گاهبهگاه خوب است؛ در حجم بالا یک بدهی است.
یک IP اختصاصی به شما اعتبار خروجی خودتان را میدهد — رفتار هیچکس دیگری بر آن اثر نمیگذارد. اما این تیغ دو لبه است: اسکرپینگ تهاجمی IP تمیزِ خودتان را میسوزاند، و وقتی یک هدف مسدودش کرد، مسدود است. یک IP اختصاصی کنترل است، نه مصونیت.
در مقیاس واقعی، به استخرهای پروکسی خارجی نیاز دارید. هیچ IP واحدی — اشتراکی یا اختصاصی — نمیتواند بار را روی آدرسهای زیاد پخش کند، که همان چیزی است که اسکرپینگ جدی در برابر اهداف با محدودیتنرخ-بر-اساس-IP نیاز دارد. پروکسیها یک لایهی عمومیِ شخصثالث هستند که رویش اضافه میکنید؛ VPS اسکرپر را اجرا میکند، استخر پروکسی آدرسها را فراهم میکند. انتظار نداشته باشید یک IP سرور کارِ یک استخر پروکسی را انجام دهد.
اخلاق و AUP — اختیاری نیست
اسکرپینگ در یک منطقهی خاکستریِ قانونی و اخلاقی زندگی میکند، پس شفاف باشید:
- به محدودیتهای نرخ و robots.txt احترام بگذارید. درخواستهایتان را محدود کنید. یک اسکرپر مؤدب شبیه ترافیک به نظر میرسد؛ یک اسکرپر بیادب شبیه یک حمله.
- به هدفتان DoS نزنید. کوبیدن یک سایت تا از پا در بیاید اسکرپینگ نیست، انکار سرویس (denial-of-service) است — و اینجا نقض استفادهی مجاز است که باعث خاتمهی سرویس میشود.
- فقط آنچه مجازید را اسکرپ کنید. جمعآوری دادهی قانونی و مجاز خط قرمز است. از آن رد شوید و به گردن خودتان است.
نتیجهی نهایی
یک VPS خانهی درست برای یک اسکرپر است: همیشهروشن، زمانبندیشده، و جدا از IP خانهتان. پلن را با پشته تطبیق دهید — Nano سه دلاری برای httpx، Micro پنج دلاری تا Small هشت دلاری برای Playwright — با یک تایمر systemd زمانبندی کنید، و دربارهی IPها صادق باشید: خروجی اشتراکی اعتبار را به اشتراک میگذارد، یک IP اختصاصی مال خودتان است که بسازید یا بسوزانید، و مقیاس واقعی یعنی استخرهای پروکسی. اول باکس را با چکلیست امنیتی VPS تازه قفل کنید، با راهنمای انتخاب اندازهی VPS درست اندازهاش کنید، و اگر حریم خصوصیِ پرداخت-بدون-کارت برایتان مهم است، تفکیک VPS ناشناس نسخهی صادقانه است. مسئولانه اسکرپ کنید — AUP واقعی است.
آمادهی اسکرپ هستید؟ یک پلن Micro شروع محکمی است؛ خزشهای موازیِ بزرگ روی Small بهتر عمل میکنند.
نظرات
هنوز نظری نیست. اولین نفر باشید.