برو به محتوای اصلی
همهٔ پروژه‌ها
۲۰۲۵اسکریپینگ وب با کمک AI، self-hosted

ScrapeGPT

لینک صفحه رو می‌دی؛ LLM پیشنهاد می‌ده چه داده‌هایی رو از کجا برداریم. برنامه پیشنهادها رو روی HTML واقعی امتحان می‌کنه، خطاها رو اصلاح می‌کنه و در آخر دادهٔ تمیز رو به شکل CSV، JSON یا XLSX تحویل می‌ده.

تصاویر و ویدیوها

مسئله

وقتی برای استخراج داده از یه سایت selectorها رو دستی می‌نویسی، یه تغییر کوچیک توی صفحه ممکنه همه‌چیز رو خراب کنه. بدتر اینکه گاهی برنامه بی‌سروصدا خروجی خالی می‌ده. ScrapeGPT از LLM کمک می‌گیره تا selectorها رو پیدا کنه، اما بعد خودش تک‌تک‌شون رو روی صفحهٔ واقعی امتحان می‌کنه. اگه چیزی پیدا نشه، selector رو اصلاح می‌کنه یا از مسیر جایگزین می‌ره تا کار با یه حدس اشتباه متوقف نشه.

نقش من

طراحی و ساخت کل برنامه با من بود: بک‌اند FastAPI و PostgreSQL، لایهٔ LLM با LiteLLM که به یه سرویس خاص وابسته نیست و کلید کاربر رو رمزنگاری می‌کنه، و رابط کاربری React/TypeScript.

مسیر کار

  1. ۰۱URL
  2. ۰۲دریافت امن
  3. ۰۳خلاصه صفحه
  4. ۰۴پیشنهاد selector
  5. ۰۵چک و ترمیم
  6. ۰۶crawl و خروجی

تصمیم‌های فنی مهم

AI پیشنهاد می‌ده، کد تأیید می‌کنه

LLM خلاصه‌ای از ساختار صفحه رو می‌بینه و selector آیتم‌ها و فیلدها رو پیشنهاد می‌ده. برنامه هر پیشنهاد رو روی HTML واقعی امتحان می‌کنه؛ صرفِ جواب مدل کافی نیست.

وقتی صفحه عوض می‌شه، کار ادامه پیدا می‌کنه

اگه یه selector چیزی پیدا نکنه، برنامه ساده‌ترش می‌کنه و دوباره امتحان می‌کنه. برای جدول‌ها هم یه روش جایگزین داره تا با یک پیشنهاد ناقص، کل استخراج از کار نیفته.

با صفحه‌های تعاملی هم کار می‌کنه

اگه داده پشت یه دکمه یا منوی کشویی باشه، کنترل رو پیدا می‌کنه و با مرورگر واقعی حالت‌های مختلفش رو باز می‌کنه. مثلاً می‌تونه هر دو حالت Metric و Imperial رو جداگانه بخونه.

امنیت از پایه

آدرس مقصد در هر redirect بررسی می‌شه و IP اتصال ثابت می‌مونه تا راه حمله‌های SSRF و DNS rebinding بسته بشه. کلید API کاربر هم با Fernet رمزنگاری می‌شه.

نتیجه

  • از بررسی صفحه تا انتخاب محدوده و استخراج، کاربر قدم‌به‌قدم جلو می‌ره. در آخر خروجی CSV، JSON یا XLSX می‌گیره و می‌بینه هر فیلد چقدر کامل استخراج شده.
  • اگه پیشنهاد LLM کامل نباشه، برنامه روش‌های دیگه رو امتحان می‌کنه و داده‌هایی رو که پیدا کرده از دست نمی‌ده.
  • اگه وسط crawl برنامه قطع بشه، صفحه‌های نیمه‌تمام دوباره پردازش می‌شن. نتیجه‌ها هم طوری ذخیره می‌شن که اجرای دوباره دادهٔ تکراری نسازه؛ لازم نیست کل کار از اول شروع بشه.