আপনার ল্যাপটপে একটি scraper ঠিক যতক্ষণ না আপনি এটি একটি run-এর মাঝপথে বন্ধ করেন, আপনার বাড়ির IP rate-limit হয়, বা আপনি চান একই job প্রতি ঘণ্টায় চলুক আপনি জেগে থাকুন বা না। এটিকে একটি VPS-এ সরানো তিনটিই ঠিক করে: এটি 24/7 চালু থাকে, এটি আপনার বাড়ির IP-র reputation পোড়ায় না, ও cron বা একটি systemd timer এটিকে সময়সূচিতে আপনি ছাড়া চালায়। এই যে সেটআপ কীভাবে করবেন, আপনার আসলে কত সার্ভার দরকার, ও যে অংশগুলো বেশিরভাগ গাইড নীরবে এড়িয়ে যায়।
এর জন্য একটি VPS কেন আপনার মেশিনকে হারায়
- 24/7 ও নির্ধারিত। যে scraper প্রতি ঘণ্টায় চলে তার একটি সবসময়-চালু host দরকার। একটি ল্যাপটপ নয়।
- আপনার বাড়ির IP পরিষ্কার থাকে। বাড়ি থেকে scrape করা মানে আপনার residential IP rate-limit ও block নেয়। একটি সার্ভার থেকে করুন আর আপনার নিজের সংযোগ অক্ষত থাকে।
- স্থিতিশীলতা। কোনো sleep নয়, একটি crawl-এর মাঝপথে কোনো wifi-drop নয়, একটি স্থির datacenter সংযোগ, ও ফলাফল জমানোর একটি জায়গা।
stack, ও প্রতিটি অংশের কী দরকার
দুটি খুব ভিন্ন ওজন-শ্রেণি, আর ভুল প্ল্যান বাছা টাকা নষ্ট করে বা job অভুক্ত করে:
- httpx / requests (Python) — API, JSON endpoint, ও static HTML-এর জন্য। এটি হালকা: process কয়েক দশ মেগাবাইটে বসে, network-bound, CPU-bound নয়। একটি $3 Nano (1 vCPU / 1 GB) এটি আরামে চালায়, এমনকি
asyncio-র মাধ্যমে concurrency সহও। - Playwright / headless Chromium — JavaScript-rendered সাইটের জন্য যেখানে আপনার একটি আসল browser লাগে। এটি ভারীটা। Headless Chromium প্রতি browser ইনস্ট্যান্সে মোটামুটি 300–400 MB, plus প্রতি খোলা context/tab-এ 100–200 MB, plus আপনার runtime। বাজেট:
- $5 Micro (2 vCPU / 2 GB) — একবারে এক বা দুটি browser context।
- $8 Small (4 vCPU / 4 GB) — কয়েকটি parallel context, বা ভারী পেজ।
মোদ্দা নিয়ম: আপনার কোড প্রায় কখনও bottleneck নয় — Chromium। scraper নয়, browser-এর জন্য size করুন।
Scheduling: cron-এর চেয়ে systemd timer
cron চলে, কিন্তু আপনি যে সার্ভার maintain করেন তাতে একটি systemd timer ভালো ডিফল্ট: journalctl-এর মাধ্যমে log, বক্স down থাকলে catch-up, ও পরিদর্শন-যোগ্য per-run status। একটি ন্যূনতম সেটআপ:
# /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 # run দেখুন
Persistent=true সেই অংশ যা cron পারে না: run-সময়ে সার্ভার বন্ধ থাকলে, job নীরবে এড়িয়ে যাওয়ার বদলে boot-এ একবার fire করে।
ফলাফল কোথায় যায়
এটি সরল রাখুন ও ভলিউমের সাথে মেলান: আপনি query করবেন এমন structured ডেটার জন্য SQLite (একটি ফাইল, শূন্য সেটআপ), দ্রুত tabular dump-এর জন্য CSV, বা ফলাফল বক্স ছাড়িয়ে গেলে বা আপনি এদের off-server চাইলে একটি S3-সঙ্গতিপূর্ণ object store। আপনার log ঘোরান (logrotate বা journald সীমা) যাতে একটি বকবকে scraper ধীরে ডিস্ক না-ভরে।
সৎ অংশ: egress IP ও reputation
এই যে বিবরণ যা ঠিক করে আপনার scraper এক সপ্তাহ কাজ করে নাকি প্রথম দিনে block হয়।
একটি NAT প্ল্যানে, outbound ট্র্যাফিক অন্য গ্রাহকদের সাথে একটি egress IP শেয়ার করে। সেই IP-র reputation শেয়ার করা — একই লক্ষ্যে scrape করা একজন প্রতিবেশী আপনি একটি request পাঠানোর আগেই ঠিকানা rate-limit করাতে পারে। হালকা, মাঝেমধ্যে scraping-এর জন্য ঠিক; ভলিউমে একটি দায়।
একটি dedicated IP আপনাকে নিজের egress reputation দেয় — আর কারো আচরণ এটিকে প্রভাবিত করে না। কিন্তু এটি দুই দিকে কাটে: আক্রমণাত্মক scraping আপনার নিজের পরিচ্ছন্ন IP পোড়ায়, আর একবার একটি লক্ষ্য এটি block করলে, এটি block। একটি dedicated IP নিয়ন্ত্রণ, অনাক্রম্যতা নয়।
আসল স্কেলে, আপনার বাইরের proxy pool দরকার। কোনো একক IP — shared বা dedicated — অনেক ঠিকানায় লোড ছড়াতে পারে না, যা IP-rate-limited লক্ষ্যের বিরুদ্ধে গুরুতর scraping-এর দরকার। Proxy একটি generic, তৃতীয়-পক্ষের স্তর যা আপনি উপরে যোগ করেন; VPS scraper চালায়, proxy pool ঠিকানা দেয়। একটি সার্ভার IP-কে একটি proxy pool-এর কাজ করার আশা করবেন না।
নীতি ও AUP — ঐচ্ছিক নয়
Scraping একটি আইনি ও নৈতিক ধূসর অঞ্চলে থাকে, তাই স্পষ্ট-দৃষ্টি রাখুন:
- rate limit ও robots.txt সম্মান করুন। আপনার request throttle করুন। একটি ভদ্র scraper ট্র্যাফিকের মতো দেখায়; একটি অভদ্র একটি আক্রমণের মতো।
- আপনার লক্ষ্যকে DoS করবেন না। একটি সাইটকে পড়ে না-যাওয়া পর্যন্ত হাতুড়ি মারা scraping নয়, এটি একটি denial-of-service — আর এটি এখানে একটি acceptable-use লঙ্ঘন যা সার্ভিস terminate করায়।
- শুধু যা অনুমোদিত তা scrape করুন। আইনি, অনুমোদিত ডেটা-সংগ্রহই রেখা। এটি পার করুন আর এটি আপনার ওপর।
শেষ কথা
একটি VPS একটি scraper-এর সঠিক ঘর: সবসময়-চালু, নির্ধারিত, ও আপনার বাড়ির IP-র বাইরে। stack-এর সাথে প্ল্যান মেলান — httpx-এর জন্য $3 Nano, Playwright-এর জন্য $5 Micro থেকে $8 Small — একটি systemd timer দিয়ে schedule করুন, ও IP নিয়ে সৎ হন: shared egress reputation শেয়ার করে, একটি dedicated IP আপনার গড়ার বা পোড়ানোর, আর আসল স্কেল মানে proxy pool। আগে new-VPS security checklist দিয়ে বক্স লক করুন, VPS sizing গাইড দিয়ে এটি সঠিক size করুন, আর কার্ড-ছাড়া-পরিশোধ প্রাইভেসি গুরুত্বপূর্ণ হলে, anonymous VPS বিশ্লেষণ সৎ সংস্করণ। দায়িত্বশীলভাবে scrape করুন — AUP আসল।
Scrape করতে প্রস্তুত? একটি Micro প্ল্যান একটি মজবুত শুরু; বড় concurrent crawl Small-এ ভালো করে।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।