பல-பக்க கிராலிங்

25 மார்., 2025

நிலையான மற்றும் இயங்குநிலை உள்ளடக்க scraping ஆகியவற்றின் அடிப்படைகளை நன்கு கற்றுக்கொண்டுள்ள நிலையில், இப்போது இன்னும் விரிவான ஒரு சவாலைக் கையாண்டு பார்க்க வேண்டிய நேரம் வந்துவிட்டது: பல-பக்க கிராலிங். இந்த பகுதி, ஒன்றோடொன்று இணைக்கப்பட்ட பல பக்கங்கள் கொண்ட இணையதளங்களில் திறமையாகச் சென்று, அவற்றிலிருந்து தரவை எடுப்பதில் கவனம் செலுத்துகிறது.

பல-பக்க இணையதளங்களை கிரால் செய்வதற்கு இரண்டு முக்கிய அணுகுமுறைகள் உள்ளன:

  1. இணைப்பு-அடிப்படையிலான கிராலிங் - பக்கங்களுக்கு இடையிலான இணைப்புகளைப் பின்தொடருவது
  2. Sitemap-அடிப்படையிலான கிராலிங் - sitemap.xml கோப்பைப் பயன்படுத்துவது

Sitemap கிராலிங்கிற்காக, பெரும்பாலான இணையதளங்கள் அனைத்து முக்கிய URL-களையும் பட்டியலிடும் sitemap.xml கோப்பை வழங்குகின்றன. இந்த ஒழுங்கமைக்கப்பட்ட XML கோப்பில் பின்வருவன அடங்கும்:

  • பக்க URL-கள்
  • கடைசியாக மாற்றப்பட்ட தேதிகள்
  • மாற்றத் தோற்றம்
  • முன்னுரிமை மதிப்புகள்

Sitemap-ஐ பயன்படுத்துவது, இணைப்பு கிராலிங்கை விட அதிக திறனுள்ளதாக இருக்கலாம், ஏனெனில் அது:

  • பக்கங்களின் முழுமையான பட்டியலை முன்கூட்டியே வழங்குகிறது
  • பக்கங்களின் முக்கியத்துவம் மற்றும் புதுப்பித்த தன்மை குறித்த metadata-ஐ உள்ளடக்குகிறது
  • தேவையற்ற பக்கங்களை கிரால் செய்வதைத் தவிர்க்கிறது
  • server சுமையை குறைக்கிறது

ஆனால் இந்த அத்தியாயத்தில், பல-பக்க e-commerce தளத்திற்கான ஒரு crawler-ஐ உருவாக்க Crawlee-ஐ பயன்படுத்தி, இணைப்பு-அடிப்படையிலான கிராலிங்கில் நாம் கவனம் செலுத்தப் போகிறோம். Crawlee, web crawling-இன் பல சிக்கலான அம்சங்களை நம்முக்காக கையாளுகிறது. அவற்றில் சில:

  • தானியங்கி queue நிர்வாகம் மற்றும் URL deduplication
  • உட்பொதிக்கப்பட்ட rate limiting மற்றும் retry logic
  • அமைத்துக்கொள்ளக்கூடிய request handling மற்றும் routing
  • தரவு சேமிப்பு மற்றும் export

நாம் கிரால் செய்யப் போகும் தளத்தின் கட்டமைப்பு இப்படியாக இருக்கும்:

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

ஒவ்வொரு product பக்கத்திற்கும் category-ஐப் பொறுத்து வெவ்வேறு layout-கள் இருக்கும். ஆனால் நாம் ஒரே மாதிரியான தகவலை எடுத்தாக வேண்டும்:

// 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 உடன் முக்கிய கிராலிங் கருத்துகள்

  1. Request Queue Management

Crawlee queue-ஐ தானாகவே கையாளுகிறது. ஆனால் அதை நாம் எப்படி அமைக்கிறோம் என்பது இதோ:

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, உட்பொதிக்கப்பட்ட URL handling மற்றும் normalization வசதிகளை வழங்குகிறது:

await crawler.run([startUrl]);

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

வேறுபட்ட URL-களை குறிப்பிட்ட handler-களுக்கு 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

சேகரிக்கப்பட்ட தரவிற்கான உட்பொதிக்கப்பட்ட storage-ஐ Crawlee வழங்குகிறது:

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

Web Crawling சிறந்த நடைமுறைகள்

கீழ்மட்டத்தில் உள்ள பல அம்சங்களை Crawlee கையாளுகிறதெனினும், நீங்கள் இன்னும் பின்வருவனைக் கருத்தில் கொள்ள வேண்டும்:

  1. Configuration

    • பொருத்தமான rate limit-களை அமைக்கவும்
    • retry strategy-களை அமைத்துக்கொள்ளவும்
    • பொருள் உள்ள user-agent string-களை அமைக்கவும்
  2. Error Handling

    • Crawlee-யின் உட்பொதிக்கப்பட்ட error handling-ஐ பயன்படுத்தவும்
    • தனிப்பயன் error callback-களை செயல்படுத்தவும்
    • பயனுள்ள diagnostic தகவலை பதிவு செய்யவும்
  3. Data Organization

    • உங்கள் தரவை ஒரே மாதிரியாக ஒழுங்கமைக்கவும்
    • routing-க்காக request label-களை பயன்படுத்தவும்
    • Crawlee-யின் dataset அம்சங்களைப் பயன்படுத்திக் கொள்ளவும்
  4. Resource Management

    • maxConcurrency-ஐ பொருத்தமாக அமைக்கவும்
    • தேவையானபோது maxRequestsPerCrawl-ஐ பயன்படுத்தவும்
    • memory பயன்பாட்டைக் கண்காணிக்கவும்

சவால்

நீங்கள் செய்ய வேண்டிய பணி, பின்வருவனவற்றைச் செய்யும் Crawlee-அடிப்படையிலான crawler-ஐ உருவாக்குவது:

  1. homepage-இல் தொடங்கி அனைத்து product category-களையும் கண்டறிதல்
  2. ஒவ்வொரு category மற்றும் subcategory பக்கத்தையும் பார்வையிடுதல்
  3. ஒவ்வொரு listing-இலிருந்தும் product தகவலை எடுப்பது
  4. தரவை ஒழுங்கமைக்கப்பட்ட கட்டமைப்பாக அமைத்தல்
  5. பல இடங்களில் தோன்றும் product-களை கையாளுதல் (உதா., featured மற்றும் category)

இந்த தளத்தில் சுமார் 25-30 product-கள் பல்வேறு category-களில் உள்ளன; அவற்றின் layout-களும் தகவல் கட்டமைப்புகளும் மாறுபடுகின்றன. உங்கள் crawler, category-களுக்கும் product-களுக்கும் இடையிலான படிநிலை உறவைப் பாதுகாத்து, முழுமையான dataset ஒன்றை உருவாக்க வேண்டும்.

உங்கள் தீர்வை சோதிப்பது

பின்வருவனவற்றைச் சோதியுங்கள்:

  • முழுமை: நீங்கள் அனைத்து product-களையும் கண்டுபிடித்தீர்களா?
  • துல்லியம்: எடுத்த தரவு சரியாக உள்ளதா?
  • கட்டமைப்பு: தரவு சரியாக ஒழுங்குபடுத்தப்பட்டுள்ளதா?
  • திறன்: நீங்கள் எத்தனை request-களைச் செய்தீர்கள்?

exercises/chapter-06/solution/src/ இல் உள்ள reference solution, Crawlee-ஐ பயன்படுத்திய செயல்படும் ஒரு implementation-ஐ வழங்குகிறது. திறமையான பல-பக்க கிராலிங் மற்றும் தரவு ஒழுங்கமைப்பிற்காக library-யின் அம்சங்களை எப்படி பயன்படுத்துவது என்பதைப் புரிந்துகொள்ள அதைப் படியுங்கள்.

மகிழ்ச்சியான கிராலிங்!