یکی از چالش‌های اصلی در حوزه پردازش زبان طبیعی (NLP) برای زبان فارسی، کمبود داده‌های ساختاریافته و باکیفیت است. ابزار Persian Web Scraper به‌عنوان یک اسکرپر متن‌باز طراحی شده تا امکان استخراج محتوای متنی از وب‌سایت‌های فارسی را به‌صورت سازمان‌یافته فراهم کند. این ابزار علاوه بر ذخیره متن، فراداده‌هایی مانند عنوان، تاریخ انتشار، دسته‌بندی، نظرات کاربران و برچسب‌ها را هم نگه‌داری می‌کند. برای استفاده مؤثر از این ابزار، لازم است مراحل نصب و اجرا را به‌درستی بدانیم. در این مقاله به‌طور کامل روش نصب و اجرای Persian Web Scraper با Docker و Node.js را بررسی می‌کنیم.

پیش‌نیازها

پیش از شروع نصب، باید مطمئن شوید که برخی ابزارها روی سیستم شما در دسترس هستند:

  • Node.js نسخه ۱۸ یا بالاتر برای اجرای محلی
  • Yarn به‌عنوان ابزار مدیریت پکیج
  • Docker و Docker Compose برای اجرای کانتینری
  • دسترسی به اینترنت برای دانلود وابستگی‌ها و دریافت صفحات وب

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

نصب Persian Web Scraper به صورت محلی با Node.js

مرحله ۱: دریافت سورس‌کد

ابتدا مخزن Persian Web Scraper را کلون کنید:

git clone https://github.com/USERNAME/persian-web-scraper.git
cd persian-web-scraper

مرحله ۲: نصب وابستگی‌ها

با استفاده از Yarn یا NPM، کتابخانه‌های موردنیاز را نصب کنید:

yarn install

یا:

npm install

مرحله ۳: اجرای ابزار

پس از نصب وابستگی‌ها می‌توانید اسکرپر را برای دامنه موردنظر اجرا کنید:

yarn dev && yarn start [SUPPORTED_DOMAIN] [options]

گزینه‌های مهمی که می‌توانید استفاده کنید:

  • --configFile مسیر فایل پیکربندی JSON
  • --verbosity تعیین سطح گزارش (۰ تا ۱۰)
  • --delay تأخیر بین درخواست‌ها
  • --max-concurrent تعداد درخواست‌های همزمان
  • --proxies محدوده پورت پروکسی‌ها

مرحله ۴: خروجی داده‌ها

نتایج اسکرپ به‌صورت JSON ذخیره می‌شوند و شامل متن مقاله، تاریخ انتشار، دسته‌بندی، برچسب‌ها و حتی نظرات کاربران هستند. همچنین وضعیت تمامی لینک‌ها در دیتابیس SQLite ذخیره می‌شود.

نصب Persian Web Scraper با Docker

اجرای ابزار در محیط Docker مزایای زیادی دارد، از جمله جداسازی محیط، سهولت در انتقال پروژه و استفاده از پروکسی‌ها.

مرحله ۱: ساخت ایمیج Docker

ابتدا ایمیج Docker را بسازید:

./buildDockerImages.sh myregistry

مرحله ۲: اجرای کانتینر

یک کانتینر جدید ایجاد کنید و مسیرهای ذخیره‌سازی را به آن متصل کنید:

docker run -d \
  --name persian_scraper \
  -v $DB_PATH/:/db \
  -v $CORPORA_PATH:/corpora \
  -v $LOG_PATH:/log \
  --mount type=bind,source=$PATH2CONFIG/config.json,target=/etc/config.json \
  myregistry/webscrap/scrapper:latest \
  node .build/index.js DOMAIN -c /etc/config.json

در این دستور:

  • $DB_PATH مسیر دیتابیس SQLite
  • $CORPORA_PATH محل ذخیره کورپوس فارسی
  • $LOG_PATH مسیر ذخیره لاگ‌ها
  • DOMAIN دامنه وب‌سایت موردنظر برای اسکرپ است.

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

در پوشه scripts مجموعه‌ای از اسکریپت‌ها وجود دارد که امکان اجرای خودکار اسکرپر روی چندین دامنه به‌طور همزمان را فراهم می‌کنند. این ویژگی برای ساخت دیتاست‌های بزرگ بسیار کاربردی است.

فایل پیکربندی (config.json)

فایل پیکربندی JSON به شما اجازه می‌دهد تا گزینه‌های پیش‌فرض را برای همه اجراها تعیین کنید. نمونه‌ای از این فایل به شکل زیر است:

{
  "debugVerbosity": 4,
  "showInfo": true,
  "showWarnings": true,
  "maxConcurrent": 2,
  "db": "./db",
  "corpora": "./corpora",
  "proxies": "3302-3306",
  "hostIP": "172.17.0.1",
  "logPath": "./log"
}

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

ساختار خروجی Persian Web Scraper

نتایج ذخیره‌شده شامل اطلاعات زیر هستند:

  • URL مقاله
  • عنوان، سرتیتر، لید و خلاصه
  • تاریخ انتشار
  • متن کامل مقاله همراه با نوع هر بخش (پاراگراف، تیتر، نقل‌قول و غیره)
  • برچسب‌ها و دسته‌بندی‌ها
  • نظرات کاربران با جزئیات مانند نام نویسنده و تاریخ
  • تصاویر و متن جایگزین آن‌ها

این ساختار خروجی امکان استفاده مستقیم از داده‌ها برای ساخت کورپوس فارسی و توسعه مدل‌های NLP را فراهم می‌کند.

مزایا و محدودیت‌های اجرای Persian Web Scraper

مزایا

  • سهولت اجرا با Docker و Node.js
  • پشتیبانی از پروکسی و مدیریت آی‌پی
  • ذخیره داده‌ها همراه با فراداده غنی
  • انعطاف‌پذیری بالا در پیکربندی

محدودیت‌ها

  • نیاز به فضای ذخیره‌سازی بزرگ برای کورپوس‌های عظیم
  • احتمال مسدود شدن از سمت برخی وب‌سایت‌ها
  • نیاز به پاکسازی داده‌ها برای حذف اطلاعات اضافی

جمع‌ بندی

اجرای صحیح Persian Web Scraper چه در حالت محلی با Node.js و چه در محیط Docker به پژوهشگران و توسعه‌دهندگان کمک می‌کند تا کورپوس فارسی باکیفیتی برای پروژه‌های پردازش زبان طبیعی (NLP) ایجاد کنند. این ابزار با حفظ فراداده و ساختار متون، داده‌هایی ارزشمند در اختیار کاربران قرار می‌دهد. هرچند محدودیت‌هایی مانند حجم بالای داده‌ها وجود دارد، اما مزایای آن در مقایسه با روش‌های سنتی جمع‌آوری متن بسیار چشمگیر است.