کثیر صفحاتی کرالنگ

Mar 25, 2025

جامد اور متحرک مواد اسکریپنگ دونوں کی بنیادی باتیں ہمارے پاس ہونے کے ساتھ، اب وقت آیا ہے کہ ایک زیادہ جامع چیلنج سے نمٹا جائے: کثیر صفحاتی کرالنگ۔ یہ سیکشن متعدد باہم جڑے صفحات والی ویب سائٹس سے مؤثر طریقے سے نیویگیٹ کرنے اور ڈیٹا نکالنے کی تکنیکوں پر توجہ مرکوز کرتا ہے۔

کثیر صفحاتی ویب سائٹس کرال کرنے کے دو اہم طریقے ہیں:

  1. لنک پر مبنی کرالنگ - صفحات کے درمیان لنکس کا پیروی کرنا
  2. سائٹ میپ پر مبنی کرالنگ - sitemap.xml فائل کا استعمال

سائٹ میپ کرالنگ کے لیے، زیادہ تر ویب سائٹس sitemap.xml فائل فراہم کرتی ہیں جو تمام اہم URLs کی فہرست بناتی ہے۔ یہ منظم XML فائل شامل کرتی ہے:

  • صفحے کے URLs
  • آخری تبدیلی کی تاریخیں
  • تبدیلی کی تعدد
  • ترجیحی قیمتیں

سائٹ میپ کا استعمال لنک کرالنگ سے زیادہ موثر ہو سکتا ہے کیونکہ یہ:

  • پیش از وقت صفحات کی مکمل فہرست فراہم کرتا ہے
  • صفحے کی اہمیت اور تازگی کے بارے میں میٹاڈیٹا شامل کرتا ہے
  • غیر ضروری صفحات کرال کرنے سے بچاتا ہے
  • سرور لوڈ کو کم کرتا ہے

لیکن اس باب کے لیے، ہم کثیر صفحاتی ای کامرس سائٹ کے لیے کرالر بنانے کے لیے Crawlee استعمال کرتے ہوئے لنک پر مبنی کرالنگ پر توجہ مرکوز کریں گے۔ Crawlee ہمارے لیے ویب کرالنگ کی بہت سی پیچیدگیاں سنبھالتا ہے، بشمول:

  • خودکار کیو مینجمنٹ اور URL کی نقل نکالنا
  • بلٹ ان ریٹ لمٹنگ اور ری ٹرائی لاجک
  • قابل اعتماد درخواست ہینڈلنگ اور روٹنگ
  • ڈیٹا اسٹوریج اور ایکسپورٹ

سائٹ کا ڈھانچہ جس کی ہم کرالنگ کریں گے کچھ اس طرح نظر آتا ہے:

ہوم پیج
├── کیٹگری: الیکٹرانکس
   ├── فونز
   ├── لیپ ٹاپس
   └── اکسیسریز
├── کیٹگری: کپڑے
   ├── مردانہ
   └── زنانہ
└── نمایاں پروڈکٹس

ہر پروڈکٹ صفحہ کیٹگری کے مطابق مختلف لے آؤٹ رکھتا ہے، لیکن ہمیں مستحکم معلومات نکالنی ہیں:

// مثال ڈیٹا ڈھانچہ جو ہم بنانا چاہتے ہیں
interface ProductData {
  name: string;
  price: number;
  rating: { score: number, count: number };
  features: string[];
  status: string; // موجود، ناموجود، وغیرہ
}

interface ResultData {
  categories: {
    electronics: {
      phones: ProductData[];
      laptops: ProductData[];
      accessories: ProductData[];
    };
    clothing: {
      mens: {
        shirts: ProductData[];
        pants: ProductData[];
      };
      womens: {
        dresses: ProductData[];
        tops: ProductData[];
      };
    };
  };
  featured_products: FeaturedProduct[];
}

Crawlee کے ساتھ اہم کرالنگ تصورات

  1. درخواست کیو کا انتظام

Crawlee کیو کو خودکار طور پر سنبھالتا ہے، لیکن یہاں اس کی کنفیگریشن ہے:

import { CheerioCrawler } from 'crawlee';

const crawler = new CheerioCrawler({
    // ہر درخواست کو سنبھالتا ہے
    async requestHandler({ $, request, enqueueLinks }) {
        // صفحے کو پروسیس کریں
        const data = extractPageData($);

        // صفحے پر پائے جانے والے نئے URLs کو خودکار طور پر کیو میں شامل کریں
        await enqueueLinks({
            selector: 'a',
            baseUrl: request.loadedUrl,
        });
    },
    // ہم وقتی درخواستوں کو محدود کریں
    maxConcurrency: 10,
});
  1. URL ہینڈلنگ

Crawlee بلٹ ان URL ہینڈلنگ اور نارملائزیشن فراہم کرتا ہے:

await crawler.run([startUrl]);

// یا زیادہ کنفیگریشن کے ساتھ:
await crawler.addRequests([{
    url: startUrl,
    userData: {
        label: 'start',
    },
}]);
  1. روٹ ہینڈلنگ

مختلف URLs کو مخصوص ہینڈلرز میں روٹ کریں:

const crawler = new CheerioCrawler({
    async requestHandler({ $, request }) {
        const { label } = request.userData;

        switch (label) {
            case 'category':
                return handleCategory($);
            case 'product':
                return handleProduct($);
            default:
                return handleHomepage($);
        }
    },
});
  1. ڈیٹا اکٹھا کرنا

Crawlee اکٹھے کیے گئے ڈیٹا کے لیے بلٹ ان اسٹوریج فراہم کرتا ہے:

const crawler = new CheerioCrawler({
    async requestHandler({ $, pushData }) {
        const productData = extractProduct($);
        await pushData(productData);
    },
});

ویب کرالنگ کے بہترین طریقہ کار

جبکہ Crawlee بہت سے کم سطح کے خدشات کو سنبھالتا ہے، آپ کو پھر بھی غور کرنا چاہیے:

  1. کنفیگریشن

    • مناسب ریٹ لمٹس سیٹ کریں
    • ری ٹرائی کی حکمت عملیاں کنفیگر کریں
    • معنی خیز user-agent strings سیٹ کریں
  2. ایرر ہینڈلنگ

    • Crawlee کی بلٹ ان ایرر ہینڈلنگ استعمال کریں
    • حسب ضرورت ایرر کال بیکس لاگو کریں
    • معنی خیز تشخیصی معلومات لاگ کریں
  3. ڈیٹا تنظیم

    • اپنے ڈیٹا کو مستحکم طریقے سے ڈھانچہ دیں
    • روٹنگ کے لیے درخواست لیبلز کا استعمال کریں
    • Crawlee کی ڈیٹاسیٹ خصوصیات کا فائدہ اٹھائیں
  4. ریسورس مینجمنٹ

    • maxConcurrency کو مناسب طریقے سے کنفیگر کریں
    • ضرورت کے وقت maxRequestsPerCrawl استعمال کریں
    • میموری کے استعمال کو مانیٹر کریں

چیلنج

آپ کا کام Crawlee پر مبنی کرالر بنانا ہے جو:

  1. ہوم پیج سے شروع کرے اور تمام پروڈکٹ کیٹگریز دریافت کرے
  2. ہر کیٹگری اور ذیلی کیٹگری صفحے کا دورہ کرے
  3. ہر فہرست سے پروڈکٹ کی معلومات نکالے
  4. ڈیٹا کو منظم شکل میں ترتیب دے
  5. متعدد جگہوں پر نظر آنے والے پروڈکٹس کو سنبھالے (جیسے نمایاں اور کیٹگری)

سائٹ میں مختلف کیٹگریز میں تقریباً 25-30 پروڈکٹس شامل ہیں، مختلف لے آؤٹس اور معلومات کی ساخت کے ساتھ۔ آپ کا کرالر ایک جامع ڈیٹاسیٹ تیار کرے جو کیٹگریز اور پروڈکٹس کے درمیان درجہ بندی کے تعلق کو برقرار رکھے۔

آپ کے حل کا امتحان

اس کے لیے ٹیسٹ کریں:

  • مکملیت: کیا آپ نے تمام پروڈکٹس تلاش کیے؟
  • درستگی: کیا نکالا گیا ڈیٹا درست ہے؟
  • ڈھانچہ: کیا ڈیٹا صحیح طریقے سے منظم ہے؟
  • کارکردگی: آپ نے کتنی درخواستیں کیں؟

_solved/chapter6/ میں حل شدہ مثال Crawlee استعمال کرتے ہوئے ریفرنس امپلیمینٹیشن فراہم کرتی ہے۔ اس کا مطالعہ کریں تاکہ سمجھ سکیں کہ موثر کثیر صفحاتی کرالنگ اور ڈیٹا تنظیم کے لیے لائبریری کی خصوصیات کا فائدہ کیسے اٹھایا جائے۔

خوش کرالنگ!