अपने ब्राउज़र ट्रैफ़िक उपयोग को सबसे अधिक कैसे अनुकूलित करें?

Senior Web Scraping Engineer
अवलोकन
जब Puppeteer का उपयोग डेटा स्क्रैपिंग के लिए किया जाता है, तो ट्रैफ़िक खपत एक महत्वपूर्ण विचार होता है। विशेष रूप से प्रॉक्सी सेवाओं का उपयोग करते समय, ट्रैफ़िक लागत काफी बढ़ सकती है। ट्रैफ़िक उपयोग को अनुकूलित करने के लिए, हम निम्नलिखित रणनीतियाँ अपना सकते हैं:
- संसाधन अवरोधन: अनावश्यक संसाधन अनुरोधों को अवरुद्ध करके ट्रैफ़िक खपत को कम करें।
- अनुरोध यूआरएल अवरोधन: यूआरएल विशेषताओं के आधार पर विशेष अनुरोधों को अवरुद्ध करके ट्रैफ़िक को और कम करें।
- मोबाइल उपकरणों का अनुकरण: हल्का पृष्ठ संस्करण प्राप्त करने के लिए मोबाइल उपकरण कॉन्फ़िगरेशन का उपयोग करें।
- व्यापक अनुकूलन: सर्वोत्तम परिणाम प्राप्त करने के लिए उपरोक्त तरीकों को मिलाएं।
अनुकूलन योजना 1: संसाधन अवरोधन
संसाधन अवरोधन परिचय
Puppeteer में, page.setRequestInterception(true)
हर नेटवर्क अनुरोध को पकड़ सकता है जिसे ब्राउज़र द्वारा शुरू किया जाता है और जारी रखने (request.continue()
), समाप्त करने (request.abort()
), या प्रतिक्रिया को कस्टमाइज़ (request.respond()
) करने का निर्णय ले सकता है।
यह विधि बैंडविड्थ खपत को काफी कम कर सकती है, विशेष रूप से क्रॉलिंग, स्क्रीनशॉटिंग, और प्रदर्शन अनुकूलन परिदृश्यों के लिए उपयुक्त है।
अवरोधन योग्य संसाधन प्रकार और सुझाव
संसाधन प्रकार | विवरण | उदाहरण | अवरोधन के बाद प्रभाव | अनुशंसा |
---|---|---|---|---|
image |
छवि संसाधन | JPG/PNG/GIF/WebP छवियाँ | छवियाँ प्रदर्शित नहीं होंगी | ⭐ सुरक्षित |
font |
फ़ॉन्ट फ़ाइलें | TTF/WOFF/WOFF2 फ़ॉन्ट | सिस्टम डिफ़ॉल्ट फ़ॉन्ट्स का उपयोग किया जाएगा | ⭐ सुरक्षित |
media |
मीडिया फ़ाइलें | वीडियो/ऑडियो फ़ाइलें | मीडिया सामग्री नहीं चलती | ⭐ सुरक्षित |
manifest |
वेब ऐप मैनिफेस्ट | PWA कॉन्फ़िगरेशन फ़ाइल | PWA कार्यक्षमता प्रभावित हो सकती है | ⭐ सुरक्षित |
prefetch |
प्रीफेच संसाधन | <link rel="prefetch"> |
पृष्ठ पर न्यूनतम प्रभाव | ⭐ सुरक्षित |
stylesheet |
सीएसएस स्टाइलशीट | बाहरी सीएसएस फ़ाइलें | पृष्ठ का स्वरूप खो जाता है, व्यवस्था प्रभावित हो सकती है | ⚠️ सावधानी |
websocket |
वेब्सॉकेट | वास्तविक समय संचार कनेक्शन | वास्तविक समय कार्यक्षमता बंद | ⚠️ सावधानी |
eventsource |
सर्वर-संकल्पित इवेंट | सर्वर पुश डेटा | पुश कार्यक्षमता बंद | ⚠️ सावधानी |
preflight |
CORS प्रीफ़्लाइट अनुरोध | OPTIONS अनुरोध | क्रॉस-ओरिजिन अनुरोध विफल | ⚠️ सावधानी |
script |
जावास्क्रिप्ट स्क्रिप्ट्स | बाहरी JS फ़ाइलें | गतिशील कार्यक्षमता बंद, SPA का रेंडर नहीं हो सकता | ❌ बचें |
xhr |
XHR अनुरोध | AJAX डेटा अनुरोध | गतिशील डेटा प्राप्त नहीं कर सकते | ❌ बचें |
fetch |
फ़ेच अनुरोध | आधुनिक AJAX अनुरोध | गतिशील डेटा प्राप्त नहीं कर सकते | ❌ बचें |
document |
मुख्य दस्तावेज | HTML पृष्ठ स्वयं | पृष्ठ लोड नहीं हो सकता | ❌ बचें |
अनुशंसा स्तर व्याख्या:
- ⭐ सुरक्षित: अवरोधन का डेटा स्क्रैपिंग या पहले स्क्रीन के रेंडरिंग पर लगभग कोई प्रभाव नहीं होता है; इसे डिफ़ॉल्ट रूप से अवरुद्ध करने की सिफारिश की जाती है।
- ⚠️ सावधानी: शैलियाँ, वास्तविक समय कार्य, या क्रॉस-ओरिजिन अनुरोधों को तोड़ सकती है; व्यावसायिक निर्णय की आवश्यकता है।
- ❌ बचें: SPA/गतिशील साइटों के सामान्य रूप से रेंडर या डेटा प्राप्त करने में विफल होने की उच्च संभावना, जब तक कि आप पूरी तरह से सुनिश्चित नहीं हैं कि आपको इन संसाधनों की आवश्यकता नहीं है।
संसाधन अवरोधन उदाहरण कोड
javascript
import puppeteer from 'puppeteer-core';
const scrapelessUrl = 'wss://browser.scrapeless.com/browser?token=your_api_key&session_ttl=180&proxy_country=ANY';
async function scrapeWithResourceBlocking(url) {
const browser = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
const page = await browser.newPage();
// अनुरोध अवरोधन सक्षम करें
await page.setRequestInterception(true);
// अवरुद्ध करने के लिए संसाधन प्रकारों को परिभाषित करें
const BLOCKED_TYPES = new Set([
'image',
'font',
'media',
'stylesheet',
]);
// अनुरोधों को अवरोधित करें
page.on('request', (request) => {
if (BLOCKED_TYPES.has(request.resourceType())) {
request.abort();
console.log(`Blocked: ${request.resourceType()} - ${request.url().substring(0, 50)}...`);
} else {
request.continue();
}
});
await page.goto(url, {waitUntil: 'domcontentloaded'});
// डेटा निकालें
const data = await page.evaluate(() => {
return {
title: document.title,
content: document.body.innerText.substring(0, 1000)
};
});
await browser.close();
return data;
}
// उपयोग
scrapeWithResourceBlocking('https://www.scrapeless.com')
hi
.then(data => console.log('स्क्रैपिंग परिणाम:', data))
.catch(error => console.error('स्क्रैपिंग विफल:', error));
अनुकूलन योजना 2: अनुरोध यूआरएल इंटरसेप्शन
संसाधन प्रकार द्वारा इंटरसेप्ट करने के अलावा, यूआरएल विशेषताओं के आधार पर अधिक सूक्ष्म इंटरसेप्शन नियंत्रण किया जा सकता है। यह विज्ञापनों, विश्लेषण स्क्रिप्टों और अन्य अनावश्यक तृतीय-पक्ष अनुरोधों को अवरुद्ध करने के लिए विशेष रूप से प्रभावी है।
यूआरएल इंटरसेप्शन रणनीतियाँ
- डोमेन द्वारा इंटरसेप्ट करें: एक विशिष्ट डोमेन से सभी अनुरोधों को ब्लॉक करें
- पथ द्वारा इंटरसेप्ट करें: एक विशिष्ट पथ से अनुरोधों को ब्लॉक करें
- फाइल प्रकार द्वारा इंटरसेप्ट करें: विशेष एक्सटेंशन वाली फ़ाइलों को ब्लॉक करें
- किवर्ड द्वारा इंटरसेप्ट करें: अनुरोधों को ब्लॉक करें जिनके यूआरएल में विशेष किवर्ड होते हैं
सामान्य इंटरसेप्ट करने योग्य यूआरएल पैटर्न
यूआरएल पैटर्न | विवरण | उदाहरण | सिफारिश |
---|---|---|---|
विज्ञापन सेवाएँ | विज्ञापन नेटवर्क डोमेन | ad.doubleclick.net , googleadservices.com |
⭐ सुरक्षित |
विश्लेषण सेवाएँ | सांख्यिकी और विश्लेषण स्क्रिप्ट | google-analytics.com , hotjar.com |
⭐ सुरक्षित |
सोशल मीडिया प्लगइन्स | सामाजिक साझाकरण बटन, आदि | platform.twitter.com , connect.facebook.net |
⭐ सुरक्षित |
ट्रैकिंग पिक्सेल | उपयोगकर्ता व्यवहार को ट्रैक करने वाले पिक्सेल | यूआरएल जिसमें पिक्सेल , बीकन , ट्रैकर शामिल हों |
⭐ सुरक्षित |
बड़े मीडिया फ़ाइलें | बड़े वीडियो, ऑडियो फ़ाइलें | एक्सटेंशनों जैसे .mp4 , .webm , .mp3 |
⭐ सुरक्षित |
फ़ॉन्ट सेवाएँ | ऑनलाइन फ़ॉन्ट सेवाएँ | fonts.googleapis.com , use.typekit.net |
⭐ सुरक्षित |
सीडीएन संसाधन | स्थिर संसाधन सीडीएन | cdn.jsdelivr.net , unpkg.com |
⚠️ सतर्कता |
यूआरएल इंटरसेप्शन उदाहरण कोड
javascript
import puppeteer from 'puppeteer-core';
const scrapelessUrl = 'wss://browser.scrapeless.com/browser?token=your_api_key&session_ttl=180&proxy_country=ANY';
async function scrapeWithUrlBlocking(url) {
const browser = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
const page = await browser.newPage();
// अनुरोध इंटरसेप्शन सक्षम करें
await page.setRequestInterception(true);
// ब्लॉक करने के लिए डोमेन और यूआरएल पैटर्न परिभाषित करें
const BLOCKED_DOMAINS = [
'google-analytics.com',
'googletagmanager.com',
'doubleclick.net',
'facebook.net',
'twitter.com',
'linkedin.com',
'adservice.google.com',
];
const BLOCKED_PATHS = [
'/ads/',
'/analytics/',
'/pixel/',
'/tracking/',
'/stats/',
];
// अनुरोधों को इंटरसेप्ट करें
page.on('request', (request) => {
const url = request.url();
// डोमेन की जांच करें
if (BLOCKED_DOMAINS.some(domain => url.includes(domain))) {
request.abort();
console.log(`अवरुद्ध डोमेन: ${url.substring(0, 50)}...`);
return;
}
// पथ की जांच करें
if (BLOCKED_PATHS.some(path => url.includes(path))) {
request.abort();
console.log(`अवरुद्ध पथ: ${url.substring(0, 50)}...`);
return;
}
// अन्य अनुरोधों की अनुमति दें
request.continue();
});
await page.goto(url, {waitUntil: 'domcontentloaded'});
// डेटा निकालें
const data = await page.evaluate(() => {
return {
title: document.title,
content: document.body.innerText.substring(0, 1000)
};
});
await browser.close();
return data;
}
// उपयोग
scrapeWithUrlBlocking('https://www.scrapeless.com')
.then(data => console.log('स्क्रैपिंग परिणाम:', data))
.catch(error => console.error('स्क्रैपिंग विफल:', error));
अनुकूलन योजना 3: मोबाइल उपकरणों का अनुकरण करें
मोबाइल उपकरणों का अनुकरण एक अन्य प्रभावी ट्रैफ़िक अनुकूलन रणनीति है क्योंकि मोबाइल वेबसाइटें आमतौर पर हल्का पृष्ठ सामग्री प्रदान करती हैं।
मोबाइल उपकरण अनुकरण के फायदे
- हल्के पृष्ठ संस्करण: कई वेबसाइटें मोबाइल उपकरणों के लिए अधिक संक्षिप्त सामग्री प्रदान करती हैं
- छोटी छवि संसाधन: मोबाइल संस्करण आमतौर पर छोटी छवियाँ लोड करते हैं
- सरल CSS और JavaScript: मोबाइल संस्करण आमतौर पर सरल शैलियों और स्क्रिप्ट का उपयोग करते हैं
- कम विज्ञापन और गैर-कोर सामग्री: मोबाइल संस्करण अक्सर कुछ गैर-कोर कार्यक्षमता को हटा देते हैं
- अनुकूलित प्रतिक्रिया: छोटे स्क्रीन के लिए अनुकूलित सामग्री लेआउट प्राप्त करें
मोबाइल उपकरण अनुकरण कॉन्फ़िगरेशन
यहाँ कई सामान्य रूप से उपयोग किए जाने वाले मोबाइल उपकरणों के लिए कॉन्फ़िगरेशन पैरामीटर हैं:
javascript
const iPhoneX = {
viewport: {
width: 375,
height: 812,
deviceScaleFactor: 3,
isMobile: true,
hasTouch: true,
isLandscape: false
}
};
या सीधे मोबाइल उपकरणों का अनुकरण करने के लिए puppeteer के अंतर्निहित तरीकों का उपयोग करें
javascript
import { KnownDevices } from 'puppeteer-core';
const iPhone = KnownDevices['iPhone 15 Pro'];
javascript
const ब्राउज़र = await puppeteer.launch();
const पृष्ठ = await ब्राउज़र.newPage();
await पृष्ठ.emulate(iPhone);
मोबाइल डिवाइस अनुकरण उदाहरण कोड
javascript
import puppeteer, {KnownDevices} from 'puppeteer-core';
const scrapelessUrl = 'wss://browser.scrapeless.com/browser?token=your_api_key&session_ttl=180&proxy_country=ANY';
async function scrapeWithMobileEmulation(url) {
const ब्राउज़र = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
const पृष्ठ = await ब्राउज़र.newPage();
// मोबाइल डिवाइस अनुकरण सेट करें
const iPhone = KnownDevices['iPhone 15 Pro'];
await पृष्ठ.emulate(iPhone);
await पृष्ठ.goto(url, {waitUntil: 'domcontentloaded'});
// डेटा निकालें
const data = await पृष्ठ.evaluate(() => {
return {
title: document.title,
content: document.body.innerText.substring(0, 1000)
};
});
await ब्राउज़र.close();
return data;
}
// उपयोग
scrapeWithMobileEmulation('https://www.scrapeless.com')
.then(data => console.log('स्क्रैपिंग परिणाम:', data))
.catch(error => console.error('स्क्रैपिंग विफल:', error));
व्यापक अनुकूलन उदाहरण
यहाँ सभी अनुकूलन योजनाओं को संयोजित करने का एक व्यापक उदाहरण है:
javascript
import puppeteer, {KnownDevices} from 'puppeteer-core';
const scrapelessUrl = 'wss://browser.scrapeless.com/browser?token=your_api_key&session_ttl=180&proxy_country=ANY';
async function optimizedScraping(url) {
console.log(`आरंभ कर रहा है अनुकूलित स्क्रैपिंग: ${url}`);
// ट्रैफिक उपयोग रिकॉर्ड करें
let totalBytesUsed = 0;
const ब्राउज़र = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
const पृष्ठ = await ब्राउज़र.newPage();
// मोबाइल डिवाइस अनुकरण सेट करें
const iPhone = KnownDevices['iPhone 15 Pro'];
await पृष्ठ.emulate(iPhone);
// अनुरोध अवरोधन सेट करें
await पृष्ठ.setRequestInterception(true);
// अवरुद्ध संसाधन प्रकारों को परिभाषित करें
const BLOCKED_TYPES = [
'image',
'media',
'font'
];
// अवरुद्ध डोमेन को परिभाषित करें
const BLOCKED_DOMAINS = [
'google-analytics.com',
'googletagmanager.com',
'facebook.net',
'doubleclick.net',
'adservice.google.com'
];
// अवरुद्ध पथों को परिभाषित करें
const BLOCKED_PATHS = [
'/ads/',
'/analytics/',
'/tracking/'
];
// अनुरोधों को अवरुद्ध करें
पृष्ठ.on('request', (request) => {
const url = request.url();
const resourceType = request.resourceType();
// संसाधन प्रकार की जाँच करें
if (BLOCKED_TYPES.includes(resourceType)) {
console.log(`अवरुद्ध संसाधन प्रकार: ${resourceType} - ${url.substring(0, 50)}...`);
request.abort();
return;
}
// डोमेन की जाँच करें
if (BLOCKED_DOMAINS.some(domain => url.includes(domain))) {
console.log(`अवरुद्ध डोमेन: ${url.substring(0, 50)}...`);
request.abort();
return;
}
// पथ की जाँच करें
if (BLOCKED_PATHS.some(path => url.includes(path))) {
console.log(`अवरुद्ध पथ: ${url.substring(0, 50)}...`);
request.abort();
return;
}
// अन्य अनुरोधों को अनुमति दें
request.continue();
});
// नेटवर्क ट्रैफिक की निगरानी करें
पृष्ठ.on('response', async (response) => {
const headers = response.headers();
const contentLength = headers['content-length'] ? parseInt(headers['content-length'], 10) : 0;
totalBytesUsed += contentLength;
});
await पृष्ठ.goto(url, {waitUntil: 'domcontentloaded'});
// लेज़ी-लोड सामग्री को ट्रिगर करने के लिए स्क्रॉलिंग का अनुकरण करें
await पृष्ठ.evaluate(() => {
window.scrollBy(0, window.innerHeight);
});
await new Promise(resolve => setTimeout(resolve, 1000))
// डेटा निकालें
const data = await पृष्ठ.evaluate(() => {
return {
title: document.title,
content: document.body.innerText.substring(0, 1000),
links: Array.from(document.querySelectorAll('a')).slice(0, 10).map(a => ({
text: a.innerText,
href: a.href
}))
};
});
// ट्रैफिक उपयोग सांख्यिकी आउटपुट करें
console.log(`\nट्रैफिक उपयोग सांख्यिकी:`);
console.log(`उपयोग किया: ${(totalBytesUsed / 1024 / 1024).toFixed(2)} MB`);
await ब्राउज़र.close();
return data;
}
// उपयोग
optimizedScraping('https://www.scrapeless.com')
.then(data => console.log('स्क्रैपिंग पूर्ण:', data))
.catch(error => console.error('स्क्रैपिंग विफल:', error));
अनुकूलन तुलना
हम अनुकूलन से पहले और बाद में ट्रैफिक की तुलना करने के लिए व्यापक उदाहरण से अनुकूलित कोड को हटाने का प्रयास करते हैं। यहाँ अनुकूलित नहीं किया गया उदाहरण कोड है:
javascript
import puppeteer from 'puppeteer-core';
Here is the translated text in Hindi:
javascript
const scrapelessUrl = 'wss://browser.scrapeless.com/browser?token=your_api_key&session_ttl=180&proxy_country=ANY';
async function optimizedScraping(url) {
console.log(`अनुकूलित स्क्रैपिंग शुरू कर रहा है: ${url}`);
// ट्रैफ़िक उपयोग रिकॉर्ड करें
let totalBytesUsed = 0;
const browser = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
const page = await browser.newPage();
// अनुरोध इंटरसेप्शन सेट करें
await page.setRequestInterception(true);
// अनुरोधों को इंटरसेप्ट करें
page.on('request', (request) => {
request.continue();
});
// नेटवर्क ट्रैफ़िक की निगरानी करें
page.on('response', async (response) => {
const headers = response.headers();
const contentLength = headers['content-length'] ? parseInt(headers['content-length'], 10) : 0;
totalBytesUsed += contentLength;
});
await page.goto(url, {waitUntil: 'domcontentloaded'});
// लेजी-लोडिंग सामग्री को सक्रिय करने के लिए स्क्रॉलिंग का अनुकरण करें
await page.evaluate(() => {
window.scrollBy(0, window.innerHeight);
});
await new Promise(resolve => setTimeout(resolve, 1000));
// डेटा निकालें
const data = await page.evaluate(() => {
return {
title: document.title,
content: document.body.innerText.substring(0, 1000),
links: Array.from(document.querySelectorAll('a')).slice(0, 10).map(a => ({
text: a.innerText,
href: a.href
}))
};
});
// ट्रैफ़िक उपयोग सांख्यिकी का आउटपुट
console.log(`\nट्रैफ़िक उपयोग सांख्यिकी:`);
console.log(`उपयोग: ${(totalBytesUsed / 1024 / 1024).toFixed(2)} MB`);
await browser.close();
return data;
}
// उपयोग
optimizedScraping('https://www.scrapeless.com')
.then(data => console.log('स्क्रैपिंग पूर्ण:', data))
.catch(error => console.error('स्क्रैपिंग विफल:', error));
अनुप्रयुक्त कोड चलाने के बाद, हम मुद्रित जानकारी से ट्रैफ़िक में अंतर को बहुत सहजता से देख सकते हैं:
परिदृश्य | ट्रैफ़िक उपयोग (MB) | बचत अनुपात |
---|---|---|
बिना अनुकूलित | 6.03 | — |
अनुकूलित | 0.81 | ≈ 86.6 % |
उपरोक्त अनुकूलन योजनाओं को संयोजित करके, प्रॉक्सी ट्रैफ़िक खपत को काफी हद तक कम किया जा सकता है, स्क्रैपिंग की दक्षता को बढ़ाया जा सकता है, और यह सुनिश्चित किया जा सकता है कि आवश्यक मुख्य सामग्री प्राप्त की गई है।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।