பல-பக்க ஊர்வலம்

Mar 25, 2025

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

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

  1. இணைப்பு-அடிப்படையிலான ஊர்வலம் - பக்கங்களுக்கு இடையில் இணைப்புகளைப் பின்பற்றுதல்
  2. சைட்மேப்-அடிப்படையிலான ஊர்வலம் - sitemap.xml கோப்பைப் பயன்படுத்துதல்

சைட்மேப் ஊர்வலத்திற்கு, பெரும்பாலான வலைதளங்கள் அனைத்து முக்கியமான URLs ஐ பட்டியலிடும் sitemap.xml கோப்பை வழங்குகின்றன. இந்த கட்டமைக்கப்பட்ட 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. கூட்டமைப்பு

    • பொருத்தமான விகித வரம்புகளை அமைக்கவும்
    • மறுமுயற்சி உத்திகளை கூட்டமைக்கவும்
    • அர்த்தமுள்ள பயனர்-ஏजென்ட் சரங்களை அமைக்கவும்
  2. பிழை கையாளுதல்

    • Crawlee இன் உள்ளமைக்கப்பட்ட பிழை கையாளுதலைப் பயன்படுத்துங்கள்
    • வைப்பட பிழை பின்னெழுத்துகளை செயல்படுத்துங்கள்
    • அர்த்தமுள்ள கண்டறியும் தகவலை பதிவு செய்யுங்கள்
  3. தரவு அமைப்பு

    • உங்கள் தரவை நிலையாக கட்டமைக்கவும்
    • வழிநிர்ணயத்திற்கு கோரிக்கை லேபல்களைப் பயன்படுத்துங்கள்
    • Crawlee இன் தரவுத்தொகுப்பு அம்சங்களைப் பயன்படுத்திக் கொள்ளுங்கள்
  4. வள நிர்வாகம்

    • maxConcurrency ஐ பொருத்தமாக கூட்டமைக்கவும்
    • தேவையானபோது maxRequestsPerCrawl ஐப் பயன்படுத்துங்கள்
    • நினைவக பயன்பாட்டைக் கண்காணிக்கவும்

சவால்

உங்கள் பணி Crawlee-அடிப்படையிலான ஊர்வலியை உருவாக்குவது:

  1. முகப்பு பக்கத்தில் தொடங்கி அனைத்து பொருள் வகைகளையும் கண்டறிகிறது
  2. ஒவ்வொரு வகை மற்றும் துணை வகை பக்கத்தையும் பார்வையிடுகிறது
  3. ஒவ்வொரு பட்டியலிலிருந்து பொருள் தகவலை பிரித்தெடுக்கிறது
  4. தரவை கட்டமைக்கப்பட்ட வடிவத்தில் அமைக்கிறது
  5. பல இடங்களில் தோன்றும் பொருட்களைக் கையாள்கிறது (எ.கா. சிறப்பு மற்றும் வகை)

தளத்தில் வெவ்வேறு வகைகளில் சுமார் 25-30 பொருட்கள் உள்ளன, வேறுபட்ட लेআउट்கள் மற்றும் தகவல் அமைப்புகளுடன். உங்கள் ஊர்வலி வகைகள் மற்றும் பொருட்களுக்கு இடையிலான படிநிலை உறவைப் பராமரிக்கும் விரிவான தரவுத்தொகுப்பை உருவாக்க வேண்டும்.

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

இவற்றிற்கு சோதனை செய்யவும்:

  • முழுமை: நீங்கள் அனைத்து பொருட்களையும் கண்டுபிடித்தீர்களா?
  • துல்லியம்: பிரித்தெடுக்கப்பட்ட தரவு சரியானதா?
  • அமைப்பு: தரவு ठीक से அமைக்கப்பட்டுள்ளதா?
  • திறன்: நீங்கள் எத்தனை கோரிக்கைகளைச் செய்தீர்கள்?

_solved/chapter6/ இல் தீர்க்கப்பட்ட உதாரணம் Crawlee ஐப் பயன்படுத்தி குறிப்பு நடைமுறையை வழங்குகிறது. திறமையான பல-பக்க ஊர்வலம் மற்றும் தரவு அமைப்பிற்கு நூலகத்தின் அம்சங்களைப் பயன்படுத்துவது எவ்வாறு என்பதைப் புரிந்துகொள்ள அதைப் படிக்கவும்.

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