کئی صفحات پر مشتمل Crawling

25 مارچ، 2025

اب جبکہ static اور dynamic دونوں طرح کے مواد کی scraping کی بنیادی باتیں ہم سیکھ چکے ہیں، تو اب وقت آ گیا ہے کہ ایک زیادہ جامع چیلنج کا سامنا کیا جائے: multi-page crawling۔ یہ حصہ ان ویب سائٹس میں، جن کے متعدد صفحات آپس میں جڑے ہوتے ہیں، مؤثر انداز میں رہنمائی کرنے اور ان سے data نکالنے پر مرکوز ہے۔

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

  1. Link-based crawling - صفحات کے درمیان links کی پیروی کرنا
  2. Sitemap-based crawling - sitemap.xml فائل استعمال کرنا

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

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

sitemap کا استعمال link crawling کے مقابلے میں زیادہ مؤثر ہو سکتا ہے کیونکہ یہ:

  • ابتدا ہی میں صفحات کی مکمل فہرست فراہم کرتا ہے
  • صفحات کی اہمیت اور تازگی سے متعلق metadata شامل کرتا ہے
  • غیر ضروری صفحات کی crawling سے بچاتا ہے
  • server پر بوجھ کم کرتا ہے

لیکن اس باب میں، ہم Crawlee استعمال کرتے ہوئے link-based crawling پر توجہ دیں گے تاکہ ایک multi-page e-commerce site کے لیے crawler تیار کیا جا سکے۔ Crawlee web crawling کی کئی پیچیدگیوں کو ہمارے لیے سنبھالتا ہے، جن میں یہ شامل ہیں:

  • خودکار queue management اور URL deduplication
  • built-in rate limiting اور retry logic
  • قابلِ ترتیب request handling اور routing
  • data storage اور export

جس site structure پر ہم crawling کریں گے، وہ کچھ یوں ہے:

Homepage
├── Category: Electronics
│   ├── Phones
│   ├── Laptops
│   └── Accessories
├── Category: Clothing
│   ├── Men's
│   └── Women's
└── Featured Products

ہر product page کا layout category کے لحاظ سے مختلف ہے، لیکن ہمیں ایک جیسی معلومات اخذ کرنا ہیں:

// Example data structure we want to build
interface ProductData {
  name: string;
  price: number;
  rating: { score: number, count: number };
  features: string[];
  status: string; // In Stock, Out of Stock, etc.
}

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 کے ساتھ Crawling کے بنیادی تصورات

  1. Request Queue Management

Crawlee queue کو خودکار طور پر سنبھالتا ہے، لیکن ہم اسے یوں configure کرتے ہیں:

import { CheerioCrawler } from 'crawlee';

const crawler = new CheerioCrawler({
    // Handles each request
    async requestHandler({ $, request, enqueueLinks }) {
        // Process the page
        const data = extractPageData($);

        // Automatically queue new URLs found on the page
        await enqueueLinks({
            selector: 'a',
            baseUrl: request.loadedUrl,
        });
    },
    // Limit concurrent requests
    maxConcurrency: 10,
});
  1. URL Handling

Crawlee built-in URL handling اور normalization فراہم کرتا ہے:

await crawler.run([startUrl]);

// Or with more configuration:
await crawler.addRequests([{
    url: startUrl,
    userData: {
        label: 'start',
    },
}]);
  1. Route Handling

مختلف URLs کو مخصوص handlers کی طرف route کریں:

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. Data Collection

Crawlee جمع کیے گئے data کے لیے built-in storage فراہم کرتا ہے:

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

Web Crawling کی بہترین عملی تدابیر

اگرچہ Crawlee نچلی سطح کے بہت سے معاملات سنبھالتا ہے، پھر بھی آپ کو یہ باتیں پیشِ نظر رکھنی چاہییں:

  1. Configuration

    • مناسب rate limits مقرر کریں
    • retry strategies کو configure کریں
    • بامعنی user-agent strings مقرر کریں
  2. Error Handling

    • Crawlee کے built-in error handling کا استعمال کریں
    • حسبِ ضرورت error callbacks نافذ کریں
    • بامعنی diagnostic معلومات log کریں
  3. Data Organization

    • اپنے data کو مستقل ساخت میں مرتب کریں
    • routing کے لیے request labels استعمال کریں
    • Crawlee کی dataset خصوصیات سے فائدہ اٹھائیں
  4. Resource Management

    • maxConcurrency کو مناسب طور پر configure کریں
    • ضرورت پڑنے پر maxRequestsPerCrawl استعمال کریں
    • memory usage کی نگرانی کریں

چیلنج

آپ کا کام ایک Crawlee-based crawler تیار کرنا ہے جو:

  1. homepage سے شروع کرے اور تمام product categories دریافت کرے
  2. ہر category اور subcategory page پر جائے
  3. ہر listing سے product information اخذ کرے
  4. data کو ایک منظم format میں ترتیب دے
  5. ایسے products کو سنبھالے جو ایک سے زیادہ جگہوں پر ظاہر ہوتے ہوں (مثلاً featured اور category)

اس site میں مختلف categories میں تقریباً 25-30 products موجود ہیں، اور ان کے layouts اور معلوماتی ساختیں مختلف ہیں۔ آپ کے crawler کو ایک ایسا جامع dataset تیار کرنا چاہیے جو categories اور products کے درمیان درجہ وار تعلق کو برقرار رکھے۔

اپنے حل کی جانچ

یہ جانچیں:

  • Completeness: کیا آپ نے تمام products تلاش کر لیے؟
  • Accuracy: کیا اخذ کیا گیا data درست ہے؟
  • Structure: کیا data مناسب طریقے سے منظم ہے؟
  • Efficiency: آپ نے کتنی requests کیں؟

exercises/chapter-06/solution/src/ میں موجود reference solution، Crawlee استعمال کرتے ہوئے ایک working implementation فراہم کرتا ہے۔ اسے غور سے دیکھیں تاکہ آپ سمجھ سکیں کہ مؤثر multi-page crawling اور data organization کے لیے library کی خصوصیات سے کیسے فائدہ اٹھایا جائے۔

crawling مبارک!