جملهٔ «اگر API داشتید بهتر است» فقط نصف حقیقت است. بعضی APIها ناقص‌اند، بعضی فیلدها فقط در UI دیده می‌شوند، و گاهی Terms اجازهٔ ingest از endpoint پنهان را نمی‌دهد. این مقاله یک framework تصمیم می‌دهد — نه برندهٔ مطلق. تعریف API در راهنمای دریافت داده از API؛ scrape صفحه در pillar وب‌اسکرپینگ.

خلاصه
  • API رسمی کامل → مسیر اصلی ingest.
  • API ناقص → hybrid (API + scrape محدود).
  • بدون API → HTML/JS با ریسک نگهداری و Terms.

معیارهای مقایسه

API در برابر scrape صفحه
معیارAPI رسمیWeb Scraping
ساختار دادهJSON/schema و versioningاستخراج از DOM یا XHR
پایداریchangelog قراردادوابسته به layout و کلاس CSS
احراز هویتAPI key، OAuth مستندcookie session، mimic مرورگر
محدودیت درخواستRate limit شفافضمنی + anti-bot
پوشش فیلدمحدود به contractنزدیک به آنچه کاربر می‌بیند
داده تاریخیبسته به endpoint و پلنsnapshotهای crawl خودتان
endpoint پنهاندر مستنداتXHR موبایل/فرانت — ریسک Terms
داده فقط در مرورگرممکن است در API نباشدقابل دسترس بعد از render
قرارداد و دسترسیمستندات و versioning APIساختار صفحه و endpoint شبکه
نگهداریتطبیق نسخه APIselector و wait
هزینهپلن API + devinfra مرورگر + نگهداری

سناریو ۱: API رسمی کامل

همه فیلدهای لازم برای BI و محصول در contract هستند، Rate limit با حجم شما جور است، Terms اجازهٔ ذخیره می‌دهد → ingest از API؛ scrape را برای همان داده تکرار نکنید مگر audit UI.

سناریو ۲: API ناقص

مثال رایج: قیمت و SKU در API، badge «ارسال فوری» یا متن تبلیغ فقط در HTML. → hybrid: bulk شبانه از API؛ scrape هدفمند هفتگی یا روی subset SKU برای فیلدهای گم‌شده. هزینه نگهداری را دو برابر فرض کنید و scope scrape را محدود نگه دارید.

سناریو ۳: بدون API عمومی

فقط وب اپ: یا Playwright برای DOM، یا همان JSON که فرانت fetch می‌زند — با بودجه نگهداری و ریسک بلاک در معماری. reverse engineering endpoint پایدارتر از scrape کامل HTML است اما وابستگی به تغییر API داخلی دارد.

Decision framework

  1. دسترسی پایدار به API و/یا crawl از نظر فنی و قرارداد پروژه تأیید شده؟
  2. آیا هر فیلد اجباری خروجی در API موجود است؟
  3. تأخیر و Rate limit API با SLA شما سازگار است؟
  4. هزینهٔ سالانه نگهداری scrape (انسان + infra) در برابر پلن API چقدر است؟
  5. آیا «حقیقت محصول» در UI با API یکی است یا marketing فقط در صفحه است؟
نکته

قبل از scrape کل سایت، DevTools → Network را برای لیست محصول چک کنید؛ گاهی endpoint JSON پایدارتر از HTML است — اگر در محدوده پروژه و پایدار باشد، مسیر اصلی ingest می‌شود.

اشتباهات رایج

فرض پوشش ۱۰۰٪ API وقتی تیم محصول فیلد جدید فقط در UI می‌گذارد؛ scrape کامل به‌خاطر lazy بودن از خواندن مستندات API؛ نادیده گرفتن historical data که API نمی‌دهد ولی شما باید archive کنید.

بعد از ingest، نرمال‌سازی برای هر دو مسیر یکسان است. خطا و Rate limit: مدیریت خطا.

در عمل چه انتخابی کنیم؟

اگر پاسخ سؤال ۲ برای API «بله» برای همه فیلدهای حیاتی → API مسیر اصلی. اگر یک فیلد حیاتی فقط در UI → hybrid با scope محدود. اگر API نیست → scrape/Playwright با بودجه نگهداری واقع‌بینانه. پیاده‌سازی: توسعه API و Scraper اختصاصی.