خزیدگی وب مقیاس بزرگ + غیرساختاریافته

May 20, 2025

به بخش نهایی در مجموعه آموزش عملی خزیدگی وب خوش آمدید. به جای درس سنتی، رویکرد متفاوتی در پیش می‌گیریم. برای این بخش، من Housefly Metascraper را ساخته‌ام - خزنده‌ای در دایرکتوری ./apps/metascraper که نشان می‌دهد چگونه همه آنچه یاد گرفته‌ایم را در سناریوی دنیای واقعی به کار ببریم.

Metascraper نشان می‌دهد که چگونه سفر گام‌به‌گام ما - از اسکرپینگ HTML استاتیک ساده، ناوبری در محتوای رندر شده با جاوااسکریپت، تا تعامل با APIها و غلبه بر دفاع‌های خزیدگی - در ابزاری که می‌تواند وب غیرساختاریافته، متنوع و آشفته را در مقیاس مدیریت کند به اوج می‌رسد.

ما بررسی خواهیم کرد که چگونه در طیف وسیعی از وب‌سایت‌ها - بدون اینکه از پیش بدانیم چه نوع ساختار داده‌ای انتظار داشته باشیم - خزیدگی کنیم و تجزیه با کمک هوش مصنوعی، تشخیص طرح‌واره پویا، و تکنیک‌های لازم برای مقیاس‌بندی به هزاران (یا میلیون‌ها) صفحه بدون فروپاشی را معرفی کنیم.

"غیرساختاریافته" و "مقیاس بزرگ" واقعاً چه معنایی دارند؟

در بخش‌های قبلی، اغلب می‌دانستیم:

  • چه سایت‌هایی را هدف قرار می‌دادیم.
  • چه داده‌هایی می‌خواستیم (مثل جداول، فهرست‌ها، پاسخ‌های JSON).
  • چند صفحه نیاز به بازدید داریم.

اما در خزیدگی غیرساختاریافته مقیاس بزرگ:

  • وب‌سایت‌ها به شدت متنوع هستند: برخی ساختاریافته، بقیه وبلاگ‌هایی با قالب‌بندی نامنظم.
  • مسیرها و URLها غیرقابل پیش‌بینی هستند.
  • طرح‌واره نامتجانس یا غیرموجود است.
  • می‌خواهیم هزاران صفحه خزیدگی کنیم، احتمالاً در چندین دامنه.

فکر کنید:

  • خزنده‌های پژوهشی که داده‌ها را در وب‌سایت‌های دانشگاهی جمع‌آوری می‌کنند.
  • دستیارهای هوش مصنوعی که وبلاگ‌ها را برای دانش مخصوص موضوع ایندکس می‌کنند.
  • موتورهای جستجو که باید در کل اینترنت عمومی تعمیم یابند.

این رئیس نهایی خزیدگی وب است.

بخش 1: معماری برای خزیدگی مقیاس بزرگ

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

الگوهای طراحی

برای ساخت خزنده مقیاس بزرگ، معماری شما باید:

  • مبتنی بر صف: از صف پیام (مانند Redis، RabbitMQ، یا Kafka) برای ذخیره URLهای در انتظار استفاده کنید.
  • مبتنی بر کارگر: خزنده‌ها را به فرآیندهای کارگر جداگانه تقسیم کنید که از صف کشیده و کارها را مستقل پردازش می‌کنند.
  • بدون تکرار: فهرست اثرانگشت‌دار (مثل SHA1 از URL یا محتوای HTML) نگه دارید تا از پردازش دوباره همان صفحه اجتناب کنید.
  • قابل از سرگیری: وضعیت خزیدگی را ذخیره کنید تا بتواند از تصادف‌ها بازیابی شود.

در اینجا دیاگرام طراحی حداقلی است:

بخش 2: تکنیک‌های پیشرفته برای 2025

پروکسی‌های مسکونی

یکی از مهم‌ترین پیشرفت‌ها در اسکرپینگ مقیاس بزرگ استفاده از پروکسی‌های مسکونی است. برخلاف IPهای datacenter که وب‌سایت‌ها به راحتی می‌توانند تشخیص داده و مسدود کنند، پروکسی‌های مسکونی درخواست‌های شما را از طریق آدرس‌های IP مصرف‌کننده واقعی مسیریابی می‌کنند و اسکرپر شما را مانند کاربر مشروع نشان می‌دهند.

عوامل خودکار مبتنی بر هوش مصنوعی

انقلابی‌ترین پیشرفت در 2025 اسکرپینگ عامل است. به جای کدنویسی سخت اسکرپرها برای هر فرمت سایت:

  • LLMهای با قابلیت‌های بینایی می‌توانند داده‌ها را از طرح‌بندی‌های قبلاً دیده نشده درک و استخراج کنند
  • عوامل هوش مصنوعی می‌توانند به طور خودکار در سایت‌های پیچیده با تقلید الگوهای مرور انسانی ناوبری کنند
  • تجزیه تطبیقی به طور خودکار با تغییرات طرح‌بندی بدون نیاز به به‌روزرسانی کد تطبیق می‌یابد

بخش 3: تجزیه با کمک هوش مصنوعی

مدل را تنظیم کنید یا مهندسی پرامپت کنید تا JSON تمیز خروجی دهد:

{
  "name": "دکتر ماریا لوپز",
  "title": "دانشمند آب و هوا",
  "organization": "استنفورد",
  "topic": "نشست آب و هوایی سازمان ملل 2023، هوش مصنوعی در مدل‌سازی آب و هوا"
}

بخش 4: ذخیره، ایندکس، و جستجوی داده‌ها

شما داده‌های ناهمگن زیادی جمع‌آوری خواهید کرد. ذخیره‌سازی خود را بر اساس اهدافتان و میزان ساختاریافته بودن داده‌ها انتخاب کنید.

استراتژی‌های ذخیره‌سازی

  • PostgreSQL یا SQLite: بهترین برای داده‌های جدولی ساختاریافته که طرح‌واره را می‌دانید (مثل مقاله‌ها، قیمت‌ها، زمان‌بندی‌ها). می‌توانید از ایندکس‌ها، کلیدهای خارجی، و جستجوی متن کامل (FTS) استفاده کنید.
  • MongoDB یا Elasticsearch: عالی برای داده‌های نیمه‌ساختاریافته یا انعطاف‌پذیر مانند blob‌های JSON که طرح‌واره ممکن است در رکوردها متفاوت باشد.
  • S3 / IPFS / سیستم فایل: ایده‌آل برای اسناپ‌شات‌های HTML خام، تصاویر، PDFها، و فایل‌های باینری بزرگ. متادیتا را در پایگاه داده ذخیره کنید و به مکان فایل لینک کنید.

از UUIDها یا هش URLها به عنوان کلید اصلی استفاده کنید تا بتوانید موارد قبلاً خزیدگی شده را حذف تکرار و ردیابی کنید.

قابل جستجو کردن

پس از ذخیره، می‌خواهید محتوا را کاوش و پرس‌وجو کنید.

گزینه‌ها عبارتند از:

  • PostgreSQL FTS (جستجوی متن کامل): از tsvector و tsquery برای ساخت قابلیت‌های جستجوی کلیدواژه قوی با رتبه‌بندی استفاده کنید.
  • Typesense یا Meilisearch: موتورهای جستجوی متن کامل سبک، انعطاف‌پذیر طرح‌واره، مناسب برای ایندکس سریع و جستجوی فازی.
  • Elasticsearch: بهترین برای موارد استفاده پیچیده‌تر جستجو یا لاگ‌ها، با فیلترینگ قوی و آنالیتیک.

باید فیلدهایی مانند این را ایندکس کنید:

  • عنوان
  • نویسنده
  • تاریخ انتشار
  • کلیدواژه‌ها یا برچسب‌ها (در صورت استخراج)
  • محتوای اصلی
  • دامنه / منبع

جستجوی معنایی با embedding

برای درک عمیق‌تر و بازیابی (فراتر از کلیدواژه‌ها)، از embedding متن استفاده کنید:

  1. از مدلی مانند text-embedding-3-small OpenAI یا جایگزین‌های منبع باز مانند bge-small-en استفاده کنید.
  2. محتوای خزیدگی شده خود را به بردارهای embedding تبدیل کنید.
  3. آن‌ها را در پایگاه داده بردار مانند موارد زیر ذخیره کنید:
    • Qdrant
    • Weaviate
    • Pinecone
    • FAISS (برای استفاده محلی / در حافظه)

این پرس‌وجوهای معنایی مانند زیر را امکان‌پذیر می‌کند:

"مقاله‌هایی را نشان بده که کسی در مورد توسعه شهری دوستدار دوچرخه در آب‌وهوای سرد صحبت می‌کند."

با مقایسه embedding پرس‌وجو با embeddingهای ذخیره شده، خزنده شما به موتور دانش تبدیل می‌شود.

متادیتا و غنی‌سازی

در نهایت، داده‌های خود را با متادیتای اضافی غنی کنید:

  • تشخیص زبان (مثل با langdetect یا fastText).
  • طبقه‌بندی دسته محتوا با استفاده از مدل‌های zero-shot یا طبقه‌بندهای تنظیم شده.
  • تشخیص موجودیت‌های نامگذاری شده (NER) برای استخراج افراد، سازمان‌ها، و مکان‌ها.
  • برچسب‌گذاری جغرافیایی بر اساس محتوا یا منبع.

این موارد را در کنار داده‌های اصلی ذخیره کنید تا بعداً بتوانید بر اساس آن‌ها فیلتر و مرتب کنید.

بخش 5: خزنده‌های کشف مبتنی بر جستجو

پیشرفته‌ترین رویکرد به خزیدگی مقیاس بزرگ حتی با URLها شروع نمی‌شود - در عوض، با پرس‌وجوهای جستجو شروع می‌شود.

الهام گرفته از ابزارهایی مانند SearchXNG و Perplexity، Metascraper استراتژی جستجو-محور را نشان می‌دهد که در آن خزنده:

  1. با موضوع یا سؤال به جای فهرست URL seed شروع می‌کند
  2. از APIهای موتور جستجو برای کشف صفحات مرتبط در زمان واقعی استفاده می‌کند
  3. صف خزیدگی خود را بر اساس نتایج جستجو به صورت پویا می‌سازد
  4. به طور هوشمند ارجاعات و منابع را دنبال می‌کند تا دانش را گسترش دهد

این رویکرد مزایای متعددی ارائه می‌دهد:

  • کاوش هدفمند: به جای خزیدگی جامع، فقط از صفحاتی که احتمالاً شامل اطلاعات مرتبط هستند بازدید می‌کنید
  • نتایج به‌روز: هر خزیدگی با نتایج جستجوی جاری شروع می‌شود
  • مستقل از دامنه: به سایت‌ها یا الگوهای URL از پیش تعریف شده محدود نیست
  • قصد-محور: با نحوه واقعی تحقیق انسان‌ها در موضوعات همسو است

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

اسکرپینگ خوشحال