پرش به محتوای اصلی
پرش به محتوای مقاله

«استخراج مستقیم HTML»؛ راهکاری برای کاهش هزینه‌های حافظه در Scraping

·۲۱ مرداد ۱۴۰۵۴ دقیقه مطالعه
راهنما
مرورگر بدون رابط گرافیکی برای استخراج مستندات سایت‌ها ضروری نیست
مرورگر بدون رابط گرافیکی برای استخراج مستندات سایت‌ها ضروری نیست
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

معرفی متدولوژی جایگزین برای مرورگرهای Headless و اشاره به استاندارد نوظهور `llms.txt` برای تسهیل دسترسی مدل‌های زبانی به مستندات.

اگر برای جمع‌آوری داده‌های مستندات فنی از مرورگرهای بدون رابط (Headless Browsers) استفاده می‌کنید، احتمالاً منابع سخت‌افزاری خود را بیهوده می‌سوزانید. بسیاری از مهندسان با پیچیده کردن مسیر استخراج داده، به جای یک درخواست ساده، کل یک مرورگر را شبیه‌سازی می‌کنند که منجر به ایجاد سقف‌های حافظه و خطاهای پیش‌بینی‌نشده (Flaky Failures) می‌شود.

به نقل از یک توسعه‌دهنده در RoamProxy در گزارشی که در ۱۱ اوت ۲۰۲۶ منتشر شد، استفاده از ابزارهای سنگین اتوماسیون برای سایت‌هایی که ساختار استاتیک دارند، یک اشتباه رایج است. این رویکرد در حالی مطرح می‌شود که توسعه‌دهندگان برای ساخت خط لوله‌های تولید بازیابی‌افزا (RAG) — شبیه دانش‌آموزی که قبل از جواب دادن، اول کتاب درسی را باز می‌کند و از آن نقل می‌آورد — به حجم زیادی از متن‌های پاک و با کیفیت نیاز دارند. در این راستا، ابزارهایی مانند Scrapeless تلاش می‌کنند تا ردیابی منابع هوش مصنوعی را از اسکرین‌شات‌های ساده به داده‌های ساختاریافته تبدیل کنند تا دقت پاسخ‌دهی مدل‌ها افزایش یابد.

در حالی که ما پیش‌تر بررسی کردیم که چگونه ابزاری مانند PhishVision از رندرینگ مرورگر برای شناسایی تزریق دستورات (Prompt Injection) استفاده می‌کند، باید توجه داشت که آن مورد خاص بر تحلیل امنیتی رفتارهای پویا متمرکز است. اما استخراج متن برای یک مدل زبانی بزرگ (LLM) — مثل کتابخانه‌داری که میلیاردها صفحه را خوانده و حالا با همان لحن جواب می‌دهد — مسئله‌ای کاملاً متفاوت است. در اینجا هدف، دریافت محتوای خام است، نه تحلیل وضعیت اجرای کدها در مرورگر. این تغییر رویکرد در استخراج داده، در واقع بخشی از روند گسترده‌تری است که در آن هوش مصنوعی زاینده، استخراج داده را از وابستگی شدید به ساختار HTML نجات داده است و انعطاف‌پذیری سیستم‌ها را در برابر تغییرات سایت‌ها افزایش داده است.

ریشه‌ی مشکل در توهمِ رندرینگ

بسیاری از توسعه‌دهندگان به اشتباه با نگاه به پنل Elements در ابزار DevTools، درباره‌ی نحوه رندر شدن یک سایت قضاوت می‌کنند. این پنل در واقع حالت نهایی DOM یا همان وضعیت «هیدراته شده» (Hydrated) را نشان می‌دهد — یعنی حالتی که پس از اجرای کامل جاوااسکریپت شکل گرفته است — و نه آنچه سرور در ابتدا به عنوان پاسخ ارسال کرده است.

از آنجا که سایت‌های مستندات، اپلیکیشن‌های وب دلخواه و پیچیده نیستند، بلکه عمدتاً توسط تعداد محدودی از «تولیدکننده‌های سایت استاتیک» (Static Site Generators) ساخته می‌شوند، محتوا در مکان‌های قابل پیش‌بینی قرار دارد. این بدان معناست که رندرینگ جاوااسکریپتی که در مرورگر مشاهده می‌کنید، اغلب تنها برای بهبود جست‌وجو و ناوبری است و محتوای اصلی از قبل در HTML وجود دارد.

طبق مستندات RoamProxy، سه مسیر اصلی برای دور زدن رندرینگ مرورگر وجود دارد:

مسیر اول: HTML استاتیک و داده‌های JSON

بسیاری از پورتال‌های مدرن، داده‌ها را مستقیماً در پاسخ اولیه (Initial Response) قرار می‌دهند.

  • سایت‌های Next.js اغلب کل محتوای صفحه را در یک تگ اسکریپت با شناسه __NEXT_DATA__ ذخیره می‌کنند. توسعه‌دهندگان می‌توانند با استفاده از ابزار httpx و یک جست‌وجوی Regex برای عبارت <script id="__NEXT_DATA__" type="application/json">(.*?)</script>، این داده‌ها را به‌صورت JSON استخراج کنند، بدون آنکه نیازی به اجرای جاوااسکریپت باشد.
  • Docusaurus متن مقالات را به صورت پیش‌فرض به HTML استاتیک تبدیل (Pre-render) می‌کند. بنابراین یک درخواست ساده httpx.get به همراه یک انتخاب‌گر (Selector) برای تگ main یا article، معمولاً برای استخراج تمام متون کافی است.
  • تست ۳۰ ثانیه‌ای: توسعه‌دهندگان می‌توانند این موضوع را با اجرای دستور curl -s <url> | grep -c "some sentence you can see on the page" تأیید کنند. اگر نتیجه عدد ۱ یا بیشتر بود، یعنی محتوا در HTML اولیه وجود دارد و هیچ نیازی به مرورگر نیست.

مسیر دوم: مخازن عمومی Markdown

در پروژه‌های متن‌باز، پاک‌ترین و خالص‌ترین داده‌ها در سورس‌کد پروژه و معمولاً در پوشه‌ی docs/ قرار دارند.

  • کلونینگ پراکنده (Sparse Cloning): با استفاده از دستوری مانند git clone --depth 1 --filter=blob:none --sparse و سپس اجرای git sparse-checkout set docs می‌توان فایل‌های اصلی Markdown را تنها در یک درخواست دریافت کرد.
  • کیفیت داده: این روش باعث می‌شود تیترها و بلوک‌های کد (Code Fences) دست‌نخورده باقی بمانند. همچنین نیاز به حذف اجزای مزاحم مانند منوهای ناوبری، بنرهای کوکی یا مدیریت محدودیت‌های نرخ درخواست (Rate Limits) در هر صفحه را از بین می‌برد.
  • نکته حقوقی: RoamProxy هشدار می‌دهد که پیش از وارد کردن داده‌ها، لایسنس را بررسی کنید؛ زیرا مستندات اغلب لایسنسی متفاوت از کد اصلی پروژه دارند.

مسیر سوم: نقاط انتهایی متنی اختصاصی

یک استاندارد نوظهور به نام /llms.txt در حال شکل‌گیری است که نقشه‌ای متنی، ساده و سازمان‌یافته از سایت را مخصوص مصرف مدل‌های هوش مصنوعی ارائه می‌دهد. شرکت‌های پیشرو در ابزارهای توسعه، به سرعت این استاندارد را پذیرفته‌اند.

  • نقشه‌های سایت: بررسی فایل /sitemap.xml لیست کامل URLها را فراهم می‌کند و نیاز به خزش (Crawl) یا کشف صفحات از طریق دنبال کردن لینک‌ها را از بین می‌برد.
  • آرشیوهای یکپارچه: سرویس‌هایی مثل ReadTheDocs و GitBook اغلب از طریق منوی نسخه‌ها، امکان دانلود کل مستندات را در قالب‌های HTML، PDF یا ePub فراهم می‌کنند.

انتخاب این مسیرها، شکل بنیادی پروژه را تغییر می‌دهد؛ شما از یک خط لوله‌ی پیچیده که به باینری‌های سنگین مرورگر نیاز دارد، به یک اسکریپت سبک تبدیل می‌شوید که اغلب پیش از آنکه یک مرورگر بدون رابط حتی لود شود، کارش را تمام می‌کند.

چه زمانی مرورگر اجباری است؟

البته برخی موارد واقعاً پویا هستند و به مرورگر نیاز دارند:

  • مستنداتی که پشت احراز هویت هستند و نشست‌ها (Sessions) توسط جاوااسکریپت در سمت کلاینت ایجاد می‌شوند.
  • اکسپلوررهای API تعاملی که محتوا را در لحظه اجرا از چندین فراخوانی API مختلف جمع‌آوری می‌کنند.
  • سایت‌هایی که محتوا را پشت چالش‌های جاوااسکریپتی (مانند سیستم‌های ضد بات) پنهان کرده‌اند. در مواجهه با این سدها، استراتژی‌هایی مانند رویکرد ارتقای تدریجی HatFetch برای دور زدن سیستم‌های شناسایی ربات می‌تواند راهگشا باشد تا دسترسی به داده‌های پویا حفظ شود.

برای یک توسعه‌دهنده عمل‌گرا، این رویکرد به معنای کاهش هزینه‌های زیرساخت و افزایش پایداری است. اگر امروز در حال ساخت خط لوله‌ی داده هستید، ابتدا به دنبال فایل /llms.txt یا پوشه‌ی docs/ در گیت‌هاب بگردید. مرورگر باید آخرین راهکار شما باشد، نه اولین ابزار.

گام بعدی شما

  • برای تمام منابع داده‌ای خود، ابتدا وجود فایل /llms.txt را بررسی کنید.
  • در پروژه‌های متن‌باز، به جای Scraping، از Sparse Checkout در Git برای دریافت فایل‌های Markdown استفاده کنید.
  • با دستور curl ساده، میزان حضور محتوا در HTML اولیه را بسنجید تا از اجرای بی‌مورد مرورگرها جلوگیری کنید.

اما بهینه‌سازی استخراج داده تنها نیمی از مسیر است؛ مدیریت این حجم از داده در پایگاه‌های داده برداری را در تحلیل بعدی بررسی خواهیم کرد.

چرا این موضوع مهم است؟

این رویکرد هزینه‌های عملیاتی استخراج داده را کاهش داده و پایداری سیستم‌های بازیابی اطلاعات را افزایش می‌دهد. تخصص در شناسایی ساختارهای استاتیک، تفاوت بین یک خط لوله‌ی شکننده و یک سیستم صنعتی مقیاس‌پذیر است.

تأثیر برای ایران

برای توسعه‌دهندگان ایرانی که با محدودیت منابع سخت‌افزاری یا هزینه‌ی بالای VPSهای خارجی روبرو هستند، جایگزینی مرورگرهای سنگین با اسکریپت‌های سبک HTTP، هزینه‌ی میزبانی را به‌شدت کاهش می‌دهد.

·نگاه ما
تحریریه دات‌هوش

اتکای بیش از حد به مرورگرهای بدون رابط نشان‌دهنده‌ی یک «شکاف ذهنی» در توسعه‌دهندگان است که وب مدرن را صرفاً از دریچه‌ی رندرینگ می‌بینند. در حالی که صنعت به سمت مدل‌های استدلالی با پنجره‌های متنی بزرگ‌تر می‌رود، گلوگاه دیگر پردازش نیست، بلکه سرعت و پاکیزگی داده‌های ورودی است. حذف لایه‌ی مرورگر، نرخ خطای خط لوله‌های RAG را به‌طور مستقیم کاهش می‌دهد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.