از Regex تا LLMها: تجربه من در استخراج دادههای بدون ساختار وب
سعی کردم یک ابزار مقایسه قیمت بسازم. این ابزار به دادههای محصول از دهها سایت تجارت الکترونیک نیاز داشت.
هر سایت از ساختارهای HTML متفاوتی استفاده میکرد. برخی از کلاسهای CSS تصادفی استفاده میکردند و برخی دیگر برای بارگذاری محتوا از JavaScript بهره میبردند.
اولین برنامهام استفاده از Regex و BeautifulSoup بود. این روش برای دو سایت جواب داد، اما بعد از آن همه چیز از هم پاشید. یک سایت چیدمان خود را تغییر داد و سایت دیگر شروع به استفاده از محتوای پویا (dynamic) کرد. من بیشتر از آنکه وقت صرف استفاده از دادهها کنم، وقتم را صرف اصلاح اسکرپرها (scrapers) میکردم.
در مرحله بعد، استفاده از LLM را امتحان کردم. کد HTML خام را برای یک هوش مصنوعی فرستادم و از آن دادهها را خواستم. این روش هم شکست خورد. خروجیها بیثبات بودند و هوش مصنوعی مقادیر ساختگی (hallucinate) ارائه میداد. هزینههای API من هم بالا رفت، چون HTML توکنهای بسیار زیادی مصرف میکرد.
بالاخره راه میانه را پیدا کردم. اکنون از یک رویکرد ترکیبی (hybrid) استفاده میکنم.
فرآیند من به این صورت است:
- پیشپردازش HTML: من اسکریپتها، استایلها و نوارهای ناوبری را حذف میکنم و فقط متنهای قابل مشاهده را نگه میدارم. این کار باعث میشود تعداد توکنها پایین بماند.
- استفاده از حالت JSON: من از
function callingاستفاده میکنم تا LLM را مجبور کنم دادههای ساختاریافته برگرداند. - افزودن منطق تلاش مجدد (retry logic): اگر JSON با خطا مواجه شد، تا سه بار تلاش مجدد میکنم.
- ذخیره نتایج در حافظه موقت (Cache): استخراجهای موفق را بر اساس URL ذخیره میکنم تا از هزینههای تکراری جلوگیری شود.
Regex و BeautifulSoup همچنان برای صفحات ایستا (static) و با ساختار مشخص، بهترین گزینهها هستند. آنها سریع و رایگاناند.
LLMها برای سایتهای نامنظم یا در حال تغییر، بهترین هستند. اما آنها جادو نمیکنند؛ برای صرفهجویی در هزینهها، حتماً باید ابتدا ورودی خود را پاکسازی کنید.
گردش کار فعلی من:
• استفاده از یک پارسر سبک برای سایتهای ساده. • استفاده از LLM برای سایتهای غیرقابل پیشبینی. • نظارت بر هزینه به ازای هر استخراج. • اعتبارسنجی خروجی برای اطمینان از واقعی بودن قیمتها.
این تغییر به من کمک کرد تا به جای یک روز، تنها در یک ساعت فروشگاههای جدید را اضافه کنم.
استراتژی شما برای دادههای نامنظم وب چیست؟ از LLMها استفاده میکنید یا به اسکرپرهای سنتی پایبند هستید؟