−25%

Windows-এর বার্ষিক পেমেন্টে, ৩১ অক্টোবর পর্যন্ত। প্ল্যান দেখুন

EQVPS
শুরু করুন

Web scraping-এর জন্য VPS: সেটআপ, sizing, ও সৎ সীমা

Jul 6, 2026 · 4 মিনিট পড়া · EQVPS Team

আপনার ল্যাপটপে একটি 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 (2 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 ঠিকানা আপনার নিজের নয়। সেই IP-র reputation-ও আপনার নয় — একই ঠিকানা থেকে একই লক্ষ্যে অন্য কারও ট্র্যাফিক আপনি একটি request পাঠানোর আগেই ঠিকানা rate-limit করাতে পারে। হালকা, মাঝেমধ্যে scraping-এর জন্য ঠিক; ভলিউমে একটি দায়।

একটি dedicated IP আপনাকে নিজের egress reputation দেয় — আর কারো আচরণ এটিকে প্রভাবিত করে না। কিন্তু এটি দুই দিকে কাটে: আক্রমণাত্মক scraping আপনার নিজের পরিচ্ছন্ন IP পোড়ায়, আর একবার একটি লক্ষ্য এটি block করলে, এটি block। একটি dedicated IP নিয়ন্ত্রণ, অনাক্রম্যতা নয়।

আসল স্কেলে, আপনার বাইরের proxy pool দরকার। কোনো একক IP — NAT বা 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 নিয়ে সৎ হন: NAT egress ঠিকানা আপনার নয়, তার reputation-ও নয়, একটি dedicated IP আপনার গড়ার বা পোড়ানোর, আর আসল স্কেল মানে proxy pool। আগে new-VPS security checklist দিয়ে বক্স লক করুন, VPS sizing গাইড দিয়ে এটি সঠিক size করুন, আর কার্ড-ছাড়া-পরিশোধ প্রাইভেসি গুরুত্বপূর্ণ হলে, anonymous VPS বিশ্লেষণ সৎ সংস্করণ। দায়িত্বশীলভাবে scrape করুন — AUP আসল।


Scrape করতে প্রস্তুত? একটি Micro প্ল্যান একটি মজবুত শুরু; বড় concurrent crawl Small-এ ভালো করে।

FAQ

Web scraping-এর জন্য আমার কী VPS spec দরকার?

stack-এর ওপর নির্ভর। একটি সাধারণ HTTP scraper (httpx/requests API বা static HTML-এ আঘাত) হালকা — 1 GB সহ একটি $3 Nano যথেষ্ট। যে মুহূর্তে JavaScript-ভারী সাইটের জন্য একটি আসল browser লাগে, headless Chromium সহ Playwright 2–4 GB চায়: এক বা দুটি browser context-এর জন্য একটি $5 Micro, কয়েকটি parallel চালালে একটি $8 Small। Chromium-ই RAM-খাদক, আপনার কোড নয়।

সার্ভারের নিজের IP থেকে scrape করতে পারি, নাকি proxy দরকার?

কম-ভলিউম, ভদ্র scraping-এর জন্য অনুমতি-দেওয়া সাইটের, সার্ভারের IP ঠিক। স্কেলে, বা IP অনুযায়ী rate-limit করা সাইটের বিরুদ্ধে, আপনার একটি বাইরের proxy pool দরকার — একটি IP (NAT বা dedicated) লোড ছড়াতে পারে না, আর একটি একক ঠিকানা থেকে হাতুড়ি মারলে এটি দ্রুত block হয়। একটি dedicated IP আপনাকে নিয়ন্ত্রণ করা একটি পরিচ্ছন্ন reputation দেয়; proxy আপনাকে অনেকগুলো দেয়।

নির্ধারিত scrape-এর জন্য cron নাকি systemd timer?

প্রায় প্রতি ক্ষেত্রে একটি systemd timer। cron-এর বিপরীতে এটি আপনাকে journalctl-এর মাধ্যমে সঠিক logging, dependency-ক্রম, বক্স down থাকলে স্বয়ংক্রিয় catch-up, ও পরিদর্শন-যোগ্য per-run status দেয়। খুব-সরল job-এর জন্য cron তবুও চলে, কিন্তু আপনি যে সার্ভার আসলে maintain করেন তাতে একটি timer ভালো ডিফল্ট।

VPS-এ কি web scraping অনুমোদিত?

আইনি, সম্মানজনক scraping — হ্যাঁ। rate limit বা robots.txt উপেক্ষা করা আক্রমণাত্মক scraping, বা একটি লক্ষ্যকে একটি denial of service-এ হাতুড়ি মারা, একটি acceptable-use লঙ্ঘন ও সার্ভিস terminate করায়। যা অনুমোদিত তা scrape করুন, নিজেকে throttle করুন, ও একটি scraper-কে একটি আক্রমণে পরিণত করবেন না।

মন্তব্য

এখনো কোনো মন্তব্য নেই। প্রথম হোন।

একটি মন্তব্য দিন

মন্তব্য প্রকাশের আগে মডারেট করা হয়।