நிலையான மற்றும் இயங்குதள இரு உள்ளடக்க ஸ்கிராப்பிங்கின் அடிப்படைகளுடன், இப்போது மிகவும் விரிவான சவாலைச் சமாளிக்கும் நேரம்: பல-பக்க ஊர்வலம். இந்த பிரிவு பல ஒன்றுடன்-ஒன்று இணைக்கப்பட்ட பக்கங்களைக் கொண்ட வலைதளங்களிலிருந்து திறமையாக வழிசெல்வது மற்றும் தரவை பிரித்தெடுப்பதில் கவனம் செலுத்துகிறது.
பல-பக்க வலைதளங்களை ஊர்ந்து செல்வதற்கு இரண்டு முக்கிய அணுகுமுறைகள் உள்ளன:
- இணைப்பு-அடிப்படையிலான ஊர்வலம் - பக்கங்களுக்கு இடையில் இணைப்புகளைப் பின்பற்றுதல்
- சைட்மேப்-அடிப்படையிலான ஊர்வலம் - 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 உடன் முக்கிய ஊர்வல கருத்துக்கள்
- கோரிக்கை வரிசை நிர்வாகம்
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,
});
- URL கையாளுதல்
Crawlee உள்ளமைக்கப்பட்ட URL கையாளுதல் மற்றும் இயல்பாக்கம் வழங்குகிறது:
await crawler.run([startUrl]);
// அல்லது மேலும் கூட்டமைப்புடன்:
await crawler.addRequests([{
url: startUrl,
userData: {
label: 'start',
},
}]);
- வழி கையாளுதல்
வெவ்வேறு 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($);
}
},
});
- தரவு சேகரிப்பு
Crawlee சேகரிக்கப்பட்ட தரவிற்கான உள்ளமைக்கப்பட்ட சேமிப்பகத்தை வழங்குகிறது:
const crawler = new CheerioCrawler({
async requestHandler({ $, pushData }) {
const productData = extractProduct($);
await pushData(productData);
},
});
வலை ஊர்வல சிறந்த நடைமுறைகள்
Crawlee பல குறைந்த-நிலை கவலைகளைக் கையாள்கிறது, நீங்கள் இன்னும் கருத்தில் கொள்ள வேண்டும்:
-
கூட்டமைப்பு
- பொருத்தமான விகித வரம்புகளை அமைக்கவும்
- மறுமுயற்சி உத்திகளை கூட்டமைக்கவும்
- அர்த்தமுள்ள பயனர்-ஏजென்ட் சரங்களை அமைக்கவும்
-
பிழை கையாளுதல்
- Crawlee இன் உள்ளமைக்கப்பட்ட பிழை கையாளுதலைப் பயன்படுத்துங்கள்
- வைப்பட பிழை பின்னெழுத்துகளை செயல்படுத்துங்கள்
- அர்த்தமுள்ள கண்டறியும் தகவலை பதிவு செய்யுங்கள்
-
தரவு அமைப்பு
- உங்கள் தரவை நிலையாக கட்டமைக்கவும்
- வழிநிர்ணயத்திற்கு கோரிக்கை லேபல்களைப் பயன்படுத்துங்கள்
- Crawlee இன் தரவுத்தொகுப்பு அம்சங்களைப் பயன்படுத்திக் கொள்ளுங்கள்
-
வள நிர்வாகம்
- maxConcurrency ஐ பொருத்தமாக கூட்டமைக்கவும்
- தேவையானபோது maxRequestsPerCrawl ஐப் பயன்படுத்துங்கள்
- நினைவக பயன்பாட்டைக் கண்காணிக்கவும்
சவால்
உங்கள் பணி Crawlee-அடிப்படையிலான ஊர்வலியை உருவாக்குவது:
- முகப்பு பக்கத்தில் தொடங்கி அனைத்து பொருள் வகைகளையும் கண்டறிகிறது
- ஒவ்வொரு வகை மற்றும் துணை வகை பக்கத்தையும் பார்வையிடுகிறது
- ஒவ்வொரு பட்டியலிலிருந்து பொருள் தகவலை பிரித்தெடுக்கிறது
- தரவை கட்டமைக்கப்பட்ட வடிவத்தில் அமைக்கிறது
- பல இடங்களில் தோன்றும் பொருட்களைக் கையாள்கிறது (எ.கா. சிறப்பு மற்றும் வகை)
தளத்தில் வெவ்வேறு வகைகளில் சுமார் 25-30 பொருட்கள் உள்ளன, வேறுபட்ட लेআउट்கள் மற்றும் தகவல் அமைப்புகளுடன். உங்கள் ஊர்வலி வகைகள் மற்றும் பொருட்களுக்கு இடையிலான படிநிலை உறவைப் பராமரிக்கும் விரிவான தரவுத்தொகுப்பை உருவாக்க வேண்டும்.
உங்கள் தீர்வை சோதிக்கவும்
இவற்றிற்கு சோதனை செய்யவும்:
- முழுமை: நீங்கள் அனைத்து பொருட்களையும் கண்டுபிடித்தீர்களா?
- துல்லியம்: பிரித்தெடுக்கப்பட்ட தரவு சரியானதா?
- அமைப்பு: தரவு ठीक से அமைக்கப்பட்டுள்ளதா?
- திறன்: நீங்கள் எத்தனை கோரிக்கைகளைச் செய்தீர்கள்?
_solved/chapter6/ இல் தீர்க்கப்பட்ட உதாரணம் Crawlee ஐப் பயன்படுத்தி குறிப்பு நடைமுறையை வழங்குகிறது. திறமையான பல-பக்க ஊர்வலம் மற்றும் தரவு அமைப்பிற்கு நூலகத்தின் அம்சங்களைப் பயன்படுத்துவது எவ்வாறு என்பதைப் புரிந்துகொள்ள அதைப் படிக்கவும்.
மகிழ்ச்சியான ஊர்வலம்!