بازگشت به وبلاگ

جمع‌آوری داده‌ها برای دیتاست‌های یادگیری ماشین: چگونه هزاران صفحه را بدون مسدودسازی و کپچا پارس کنیم

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

📅۲۳ اسفند ۱۴۰۴
```html

کیفیت مدل ML به طور مستقیم به کیفیت و حجم داده‌های آموزشی بستگی دارد. اما به محض اینکه شروع به جمع‌آوری هزاران صفحه می‌کنید — سایت‌ها شروع به مسدود کردن درخواست‌ها، نمایش کپچا و مسدود کردن IP می‌کنند. در این مقاله بررسی می‌کنیم که چگونه یک پایپ‌لاین قابل اعتماد برای جمع‌آوری داده‌ها برای دیتاست‌ها ایجاد کنیم: چه ابزارهایی استفاده کنیم، چگونه از محافظت‌ها عبور کنیم و چه نوع پروکسی برای هر وظیفه مناسب است.

چرا سایت‌ها جمع‌آوری داده‌ها را مسدود می‌کنند و چه باید کرد

وقتی شما جمع‌آوری خودکار داده‌ها را راه‌اندازی می‌کنید، سایت به جای یک کاربر عادی، یک جریان درخواست از یک آدرس IP را می‌بیند. این بلافاصله پرچم‌های قرمز را در سیستم‌های حفاظتی — Cloudflare، DataDome، PerimeterX و دیگر راه‌حل‌های ضد ربات بالا می‌برد. نتیجه: کپچا، مسدودیت موقت یا مسدودیت کامل IP.

این مشکل به ویژه برای پروژه‌های ML حاد است، زیرا دیتاست به 100 صفحه نیاز ندارد، بلکه به ده‌ها هزار صفحه نیاز دارد. برای آموزش حتی یک مدل ساده طبقه‌بندی متن به حداقل 5,000–10,000 نمونه نیاز است. برای بینایی کامپیوتری — صدها هزار تصویر. جمع‌آوری چنین حجمی از یک IP به طور فیزیکی غیرممکن است.

سیستم‌های حفاظتی پارامترهای زیر را تحلیل می‌کنند:

  • فرکانس درخواست‌ها — بیشتر از 10–20 درخواست در دقیقه از یک IP مشکوک است.
  • User-Agent و هدرها — هدرهای استاندارد پارسرها به راحتی شناسایی می‌شوند.
  • عدم وجود کوکی و داده‌های جلسه — یک مرورگر واقعی همیشه تاریخچه را حمل می‌کند.
  • جغرافیای IP — IP دیتاسنتر از هلند در یک سایت روسی به نظر مشکوک می‌رسد.
  • الگوی رفتار — انسان صفحه را 30–60 ثانیه می‌خواند، ربات — 0.3 ثانیه.

راه‌حل — ترکیبی از پروکسی‌های مناسب، چرخش IP و شبیه‌سازی رفتار یک کاربر واقعی است. هر عنصر را به تفصیل بررسی می‌کنیم.

داده‌ها برای دیتاست‌های ML از کجا می‌آیند: منابع اصلی

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

دیتاست‌های باز (بدون پارسینگ)

اولین چیزی که باید بررسی کنید — دیتاست‌های باز موجود است. Kaggle، Hugging Face Datasets، Google Dataset Search، UCI Machine Learning Repository شامل هزاران مجموعه داده آماده هستند. اگر وظیفه شما استاندارد است (طبقه‌بندی متن، شناسایی اشیاء، تحلیل احساسات)، ممکن است دیتاست از قبل وجود داشته باشد. این کار هفته‌ها کار را صرفه‌جویی می‌کند.

وب‌پارسینگ (نیاز به پروکسی دارد)

وقتی داده‌های آماده وجود ندارد یا به مشخصات شما نمی‌خورد — نیاز به پارسینگ است. وظایف معمول عبارتند از:

  • جمع‌آوری نظرات از Wildberries، Ozon، یاندکس.مارکت برای تحلیل احساسات
  • پارسینگ سایت‌های خبری برای آموزش مدل‌های زبانی
  • جمع‌آوری تصاویر محصولات برای مدل‌های بینایی کامپیوتری
  • پارسینگ آگهی‌ها از hh.ru، SuperJob برای مدل‌های HR
  • جمع‌آوری داده‌های قیمت از بازارها برای مدل‌های پیش‌بینی
  • پارسینگ شبکه‌های اجتماعی (VKontakte، Twitter/X) برای وظایف NLP

API پلتفرم‌ها (بخشی بسته)

برخی پلتفرم‌ها API‌های رسمی ارائه می‌دهند — Twitter/X API، Reddit API، Google Places API. مشکل: آنها گران هستند، محدودیت دارند و معمولاً داده‌های مورد نیاز را به صورت رایگان ارائه نمی‌دهند. بنابراین بسیاری از تیم‌های ML API را با پارسینگ ترکیب می‌کنند.

داده‌های مصنوعی

یک رویکرد جداگانه — تولید داده‌های مصنوعی با استفاده از GPT-4 یا دیگر LLM. اما برای این کار به هر حال به داده‌های واقعی به عنوان پایه (نمونه‌های few-shot) نیاز است. بنابراین پارسینگ همچنان ابزار اصلی جمع‌آوری داده‌ها برای اکثر پروژه‌های ML باقی می‌ماند.

ابزارهایی برای جمع‌آوری داده‌ها بدون نوشتن کد

خبر خوب: برای جمع‌آوری داده‌ها برای دیتاست‌های ML نیازی به توسعه‌دهنده بودن نیست. ابزارهای آماده no-code و low-code وجود دارند که می‌توانند با پروکسی کار کنند و از محافظت‌های پایه عبور کنند.

پارس‌های بدون کد

ابزار برای چه چیزی مناسب است پشتیبانی از پروکسی سختی
Octoparse سایت‌ها، جداول، صفحه‌بندی ✅ بله پایین
ParseHub سایت‌های دینامیک (JS) ✅ بله پایین
Apify اکتورهای آماده برای 100+ سایت ✅ داخلی متوسط
Bright Data IDE سایت‌های محافظت‌شده پیچیده ✅ داخلی متوسط
Scrapy Cloud پارسینگ مقیاس‌پذیر ✅ از طریق middleware بالا

برای اکثر وظایف جمع‌آوری داده‌های ML، Octoparse یا Apify کافی است. Octoparse به شما امکان می‌دهد پارسر را به صورت بصری در 20–30 دقیقه تنظیم کنید: عناصر صفحه را مشخص می‌کنید، صفحه‌بندی را تنظیم می‌کنید، پروکسی را وارد می‌کنید — و جمع‌آوری را آغاز می‌کنید. نتیجه به صورت CSV یا JSON خروجی می‌شود که می‌توان بلافاصله برای آموزش استفاده کرد.

Apify به ویژه مناسب است اگر نیاز به پارس کردن پلتفرم‌های محبوب دارید: آنها "اکتورهای" آماده برای Instagram، Twitter/X، Amazon، Google Maps، LinkedIn و ده‌ها سایت دیگر دارند. شما فقط پارامترها را تعیین می‌کنید — و داده‌های ساختاریافته را دریافت می‌کنید.

چه نوع پروکسی برای دیتاست‌های ML انتخاب کنیم

انتخاب نوع پروکسی — یکی از عوامل کلیدی موفقیت در جمع‌آوری داده‌ها است. اشتباه در اینجا هزینه‌بر است: یا در نیمه راه مسدود می‌شوید، یا برای قدرت غیرضروری بیش از حد پرداخت می‌کنید. سه نوع اصلی را بررسی می‌کنیم.

پروکسی‌های مسکونی — برای سایت‌های محافظت‌شده

پروکسی‌های مسکونی — آدرس‌های IP کاربران واقعی خانگی هستند. برای سیستم‌های ضد ربات، آنها از یک بازدیدکننده عادی غیرقابل تشخیص هستند. این ویژگی آنها را برای پارس کردن سایت‌های با محافظت جدی ایده‌آل می‌کند: بازارها (Wildberries، Ozon)، شبکه‌های اجتماعی، تجمیع‌کننده‌های خبری.

مزیت اصلی برای وظایف ML: می‌توانید داده‌ها را با جغرافیای مرتبط جمع‌آوری کنید. اگر مدل را بر روی محتوای منطقه‌ای آموزش می‌دهید — پروکسی از منطقه مورد نظر روسیه یا کشور دیگر را انتخاب می‌کنید. این برای وظایف طبقه‌بندی جغرافیایی یا تحلیل لهجه‌های منطقه‌ای به ویژه مهم است.

پروکسی‌های موبایلی — برای شبکه‌های اجتماعی و پلتفرم‌های موبایلی

پروکسی‌های موبایلی از IP اپراتورهای موبایل (4G/5G) استفاده می‌کنند. آنها بالاترین سطح اعتماد را در پلتفرم‌ها دارند — زیرا یک IP موبایل واقعاً توسط صدها نفر به طور همزمان استفاده می‌شود (همه مشترکان یک دکل از طریق یک IP خارج می‌شوند). این به این معنی است که حتی جمع‌آوری فعال داده‌ها از یک IP موبایل به طور طبیعی به نظر می‌رسد.

پروکسی‌های موبایلی به ویژه زمانی ضروری هستند که شما داده‌ها را از VKontakte، TikTok یا Instagram جمع‌آوری می‌کنید — پلتفرم‌هایی که به شدت IP‌های دیتاسنتر را مسدود می‌کنند.

پروکسی‌های دیتاسنتر — برای منابع باز و سرعت

پروکسی‌های دیتاسنتر — سریع و ارزان هستند. آنها به کاربران واقعی وابسته نیستند، بنابراین راحت‌تر توسط سیستم‌های حفاظتی شناسایی می‌شوند. اما برای بسیاری از وظایف ML، این کافی است: اگر شما ویکی‌پدیا، آرشیوهای باز، GitHub، API‌های عمومی یا سایت‌های بدون محافظت جدی را پارس می‌کنید — پروکسی‌های دیتاسنتر به خوبی عمل می‌کنند و هزینه کمتری دارند.

چگونه نوع پروکسی را برای وظیفه ML خود انتخاب کنیم:

  • بازارها (Wildberries، Ozon، Avito): پروکسی‌های مسکونی با چرخش
  • شبکه‌های اجتماعی (VKontakte، Instagram، TikTok): پروکسی‌های موبایلی
  • سایت‌های خبری، فروم‌ها، ویکی‌پدیا: پروکسی‌های دیتاسنتر
  • جستجوی گوگل، یاندکس: پروکسی‌های مسکونی یا موبایلی
  • آرشیوهای باز، Common Crawl: پروکسی‌های دیتاسنتر

سناریوهای عملی: متن، تصاویر، قیمت‌ها، نظرات

سناریوهای خاص جمع‌آوری داده‌ها برای انواع محبوب وظایف ML را بررسی می‌کنیم — با اشاره به منابع، ابزارها و نوع پروکسی مورد نیاز.

سناریو 1: دیتاست نظرات برای تحلیل احساسات (NLP)

وظیفه: جمع‌آوری 50,000 نظر با امتیاز از Wildberries برای آموزش مدل طبقه‌بندی احساسات.

منبع: Wildberries — نظرات به محصولات با امتیاز 1–5 ستاره (نشانه‌گذاری ایده‌آل از قبل وجود دارد).
ابزار: Octoparse یا یک اسکریپت آماده در Python با کتابخانه requests.
پروکسی: مسکونی با چرخش — Wildberries به شدت IP‌های دیتاسنتر را مسدود می‌کند.
سرعت جمع‌آوری: 1 درخواست هر 3–5 ثانیه با وقفه — 50,000 نظر در 2–3 روز.

چه چیزی دریافت می‌کنید: فایل CSV با ستون‌ها: متن نظر، امتیاز (1–5)، دسته محصول، تاریخ. این یک دیتاست آماده برای آموزش است — نشانه‌گذاری از قبل در داده‌ها گنجانده شده است.

سناریو 2: دیتاست تصاویر برای بینایی کامپیوتری

وظیفه: جمع‌آوری 100,000 تصویر از محصولات در چندین دسته برای آموزش مدل طبقه‌بندی.

منبع: Ozon، یاندکس.مارکت — عکس‌های محصولات با دسته‌ها.
ابزار: Apify (اکتورهای آماده برای e-commerce موجود است) یا ParseHub.
پروکسی: پروکسی‌های مسکونی با چرخش جغرافیایی در روسیه.
مهم: تصاویر را از طریق پروکسی دانلود کنید، نه به طور مستقیم — سرورهای CDN نیز می‌توانند بارگذاری‌های انبوه را مسدود کنند.

چه چیزی دریافت می‌کنید: پوشه‌هایی با تصاویر که بر اساس دسته‌ها تقسیم‌بندی شده‌اند — ساختاری که به طور مستقیم توسط ImageDataGenerator در Keras یا DataLoader در PyTorch پذیرفته می‌شود.

سناریو 3: مجموعه متنی برای مدل زبانی

وظیفه: جمع‌آوری یک مجموعه بزرگ از متون به زبان روسی برای آموزش مجدد (fine-tuning) مدل زبانی تحت موضوع خاص — به عنوان مثال، متون حقوقی یا مقالات پزشکی.

منبع: فروم‌های موضوعی، سایت‌های خبری، Habr، پورتال‌های حرفه‌ای.
ابزار: Scrapy Cloud یا Octoparse برای جمع‌آوری ساختاریافته.
پروکسی: پروکسی‌های دیتاسنتر با چرخش — بیشتر سایت‌های متنی محافظت سختی ندارند و سرعت مهم‌تر از ناشناسی است.
سرعت: با پروکسی‌های دیتاسنتر می‌توان 50–100 درخواست در دقیقه انجام داد و یک میلیون سند را در چند روز جمع‌آوری کرد.

سناریو 4: دیتاست آگهی‌ها برای مدل HR

وظیفه: جمع‌آوری 200,000 آگهی از hh.ru برای آموزش مدل توصیه یا طبقه‌بندی مشاغل.

منبع: hh.ru — آنها یک API رسمی دارند، اما با محدودیت‌ها. برای حجم‌های بزرگ نیاز به پارسینگ است.
ابزار: Apify (اکتور برای hh.ru موجود است) یا Octoparse.
پروکسی: پروکسی‌های مسکونی — hh.ru به خوبی محافظت شده است و IP‌های دیتاسنتر را مسدود می‌کند.
چه چیزی دریافت می‌کنید: داده‌های ساختاریافته: عنوان آگهی، توضیحات، حقوق، الزامات، منطقه، صنعت — یک دیتاست عالی برای NLP و سیستم‌های توصیه.

چگونه از مسدودیت‌ها در جمع‌آوری داده‌های انبوه جلوگیری کنیم

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

چرخش IP و جلسات

مهم‌ترین قانون: از یک IP برای هزاران درخواست استفاده نکنید. چرخش را تنظیم کنید تا هر 10–50 درخواست IP تغییر کند. بیشتر ابزارها (Octoparse، Apify، Scrapy) این کار را به صورت پیش‌فرض هنگام اتصال به پروکسی‌پول پشتیبانی می‌کنند.

علاوه بر این، کوکی‌های جلسه را همراه با IP تغییر دهید — این یک کاربر جدید را شبیه‌سازی می‌کند، نه فقط تغییر آدرس.

تاخیرهای صحیح بین درخواست‌ها

تاخیرهای تصادفی بین درخواست‌ها اضافه کنید — نه 2 ثانیه ثابت، بلکه تصادفی از 1 تا 5 ثانیه. فاصله ثابت به راحتی به عنوان الگوی ربات شناسایی می‌شود. تصادفی — رفتار انسان را شبیه‌سازی می‌کند.

برای سایت‌های به شدت محافظت‌شده، تاخیرهای طولانی‌تری اضافه کنید: هر 100 درخواست یک وقفه 30–60 ثانیه‌ای داشته باشید. این سرعت را کاهش می‌دهد، اما به طور قابل توجهی خطر مسدودیت را کاهش می‌دهد.

هدرهای درخواست صحیح

User-Agent را بر روی یک مرورگر به‌روز (Chrome، Firefox آخرین نسخه‌ها) تنظیم کنید. هدرهای استاندارد HTTP را اضافه کنید: Accept-Language، Accept-Encoding، Referer. عدم وجود این هدرها — نشانه واضحی از ربات برای بیشتر سیستم‌های حفاظتی است.

جمع‌آوری در زمان‌های غیرکاری

جمع‌آوری انبوه را در شب (از 2:00 تا 6:00 به وقت مسکو) راه‌اندازی کنید. در این زمان ترافیک در سایت‌ها حداقل است، سیستم‌های ضد ربات کمتر تهاجمی هستند و درخواست‌های شما سهم بیشتری از بار را تشکیل می‌دهند — که به طرز پارادوکسی مشکوکیت را کاهش می‌دهد، زیرا ترافیک رقابتی کمتر است.

مدیریت خطاها و تلاش‌های مجدد

مدیریت خودکار کدهای پاسخ را تنظیم کنید:

  • 429 (بیش از حد درخواست) — تاخیر را افزایش دهید، IP را تغییر دهید، 5–10 دقیقه صبر کنید.
  • 403 (ممنوع) — IP مسدود شده است، حتماً پروکسی را تغییر دهید.
  • 503 (سرویس در دسترس نیست) — بارگذاری موقت سرور، دوباره بعد از 1–2 دقیقه تلاش کنید.
  • 200 با کپچا — به پروکسی با کیفیت بالاتر نیاز است (مسکونی به جای دیتاسنتر).

تناسب جغرافیایی پروکسی و سایت

از پروکسی‌هایی استفاده کنید که از همان کشور سایت هدف هستند. اگر از Wildberries پارس می‌کنید — IP‌های روسی را انتخاب کنید. اگر داده‌ها را از یک سایت آلمانی جمع‌آوری می‌کنید — به پروکسی‌های آلمانی نیاز دارید. عدم تناسب جغرافیایی — یکی از رایج‌ترین محرک‌های مسدودیت است.

چک‌لیست: تنظیم پایپ‌لاین جمع‌آوری داده‌ها برای ML

از این چک‌لیست قبل از راه‌اندازی هر نوع جمع‌آوری داده‌های مقیاس‌پذیر برای دیتاست استفاده کنید:

📋 آماده‌سازی

  • ☐ بررسی وجود دیتاست آماده در Kaggle / Hugging Face
  • ☐ مطالعه robots.txt سایت هدف
  • ☐ تعیین حجم داده‌ها و ساختار دیتاست
  • ☐ انتخاب ابزار پارسینگ (Octoparse، Apify، Scrapy)
  • ☐ انتخاب نوع پروکسی برای وظیفه (مسکونی / موبایلی / دیتاسنتر)

⚙️ تنظیم

  • ☐ اتصال پروکسی‌پول با چرخش IP
  • ☐ تنظیم User-Agent (Chrome/Firefox به‌روز)
  • ☐ افزودن هدرهای استاندارد HTTP
  • ☐ تنظیم تاخیرهای تصادفی (1–5 ثانیه)
  • ☐ تنظیم مدیریت خطاها (429، 403، 503)
  • ☐ تعیین فرمت خروجی داده‌ها (CSV، JSON، JSONL)

🧪 آزمایش

  • ☐ راه‌اندازی آزمایش بر روی 100–500 رکورد
  • ☐ بررسی کیفیت و کامل بودن داده‌ها
  • ☐ اطمینان از عدم وجود مسدودیت‌ها در حجم آزمایشی
  • ☐ بررسی سرعت جمع‌آوری و محاسبه زمان برای دیتاست کامل

🚀 راه‌اندازی و نظارت

  • ☐ راه‌اندازی در زمان شب (02:00–06:00 به وقت مسکو)
  • ☐ تنظیم اعلان‌های خطا
  • ☐ به طور دوره‌ای کیفیت داده‌های جمع‌آوری‌شده را بررسی کنید
  • ☐ ذخیره نتایج میانی (چک‌پوینت هر 10,000 رکورد)

🧹 پردازش پس از جمع‌آوری

  • ☐ حذف تکراری‌ها
  • ☐ پاک‌سازی تگ‌های HTML و نمادهای خاص از متون
  • ☐ بررسی تعادل کلاس‌ها (برای وظایف طبقه‌بندی)
  • ☐ تقسیم‌بندی به مجموعه‌های train/validation/test
  • ☐ ذخیره در فرمت سازگار با فریم‌ورک ML شما

نتیجه‌گیری

جمع‌آوری داده‌ها برای دیتاست‌های ML یک وظیفه یک‌باره نیست، بلکه یک فرآیند سیستماتیک است. نکات اصلی این مقاله: انتخاب صحیح پروکسی تعیین می‌کند که آیا به پایان می‌رسید یا در مسدودیت‌ها متوقف می‌شوید. پروکسی‌های مسکونی برای بازارهای محافظت‌شده و تجمیع‌کننده‌ها نیاز است، پروکسی‌های موبایلی برای شبکه‌های اجتماعی، و پروکسی‌های دیتاسنتر برای منابع متنی باز. ابزارهایی مانند Octoparse و Apify به شما امکان می‌دهند پایپ‌لاین را بدون نوشتن کد بسازید. و رعایت قوانین پایه (چرخش IP، تاخیرهای تصادفی، هدرهای صحیح) به شما این امکان را می‌دهد که صدها هزار رکورد را بدون ضرر جمع‌آوری کنید.

اگر قصد دارید داده‌ها را از بازارها، سایت‌های خبری یا پورتال‌های موضوعی برای آموزش مدل‌های ML جمع‌آوری کنید، توصیه می‌کنیم با پروکسی‌های مسکونی شروع کنید — آنها حداکثر سطح اعتماد را از طرف سیستم‌های حفاظتی و حداقل خطر مسدودیت‌ها حتی در جمع‌آوری داده‌های مقیاس‌پذیر فراهم می‌کنند.

```