جدید ویب ایپلی کیشنز شاذ و نادر ہی مکمل HTML فراہم کرتی ہیں — اس کے بجائے، مواد JavaScript کے ذریعے متحرک طور پر لوڈ اور رینڈر کیا جاتا ہے۔ اس سے ویب scraping کے لیے کچھ منفرد چیلنجز پیدا ہوتے ہیں، جن سے ہم ان دو ابواب میں نمٹیں گے۔
باب 4: متحرک نیوز فیڈ
ہمارا پہلا چیلنج ایک ایسی نیوز فیڈ سے scraping کرنا ہے جہاں مضامین JavaScript کے ذریعے متحرک طور پر لوڈ ہوتے ہیں۔ اس سے چند اہم تصورات متعارف ہوتے ہیں:
- Playwright کے ساتھ browser automation
- متحرک مواد کے لوڈ ہونے کا انتظار کرنا
- JavaScript سے رینڈر ہونے والے DOM elements کو سنبھالنا
صفحے کی ساخت کچھ اس طرح نظر آتی ہے:
<div class="news-feed">
<article class="news-item">
<h2>Breaking News Title</h2>
<p>Article content...</p>
<div class="meta">
<span>By Author Name</span>
<time datetime="2024-03-08T12:00:00Z">March 8, 2024</time>
</div>
</article>
<!-- More articles load dynamically -->
</div>
جامد HTML scraping کے مقابلے میں بنیادی فرق یہ ہیں:
// Instead of cheerio.load(), we use Playwright
const browser = await chromium.launch();
const page = await browser.newPage();
// Wait for content to render
await page.waitForSelector('.news-item');
// Extract data from the live DOM using page.$$eval()
// This runs the callback function in the browser context
// to evaluate all elements matching the selector at once
const items = await page.$$eval('.news-item', elements => {
// Works like Array.map() on matching elements
// Returns serializable JavaScript objects
// Perfect for extracting data from multiple elements
});
باب 5: Infinite Scroll گیلری
متحرک مواد کے بارے میں اپنی معلومات کو آگے بڑھاتے ہوئے، اب ہم ایک اور بھی زیادہ پیچیدہ صورتِ حال سے نمٹتے ہیں — ایک فوٹو گیلری جس میں infinite scroll موجود ہے۔ اس میں یہ امور شامل ہیں:
- lazy-loaded مواد کو سنبھالنا
- scroll events کا پتا لگانا اور انہیں متحرک کرنا
- async loading states کا نظم و نسق
- پیچیدہ UI patterns سے ڈیٹا نکالنا
یہاں چیلنج یہ ہے کہ جیسے جیسے صارف scroll کرتا ہے، مواد بتدریج لوڈ ہوتا جاتا ہے:
<div class="photo-gallery">
<div class="photo-card">
<img src="..." alt="Photo title" />
<h2>Photo Title</h2>
<p>By Photographer Name</p>
<div class="flex">
<span>❤️ 42</span>
</div>
</div>
<!-- More photos load on scroll -->
</div>
infinite scroll کو سنبھالنے کے لیے اہم تصورات:
// Scroll to bottom until no new content loads
let previousHeight;
while (true) {
previousHeight = await page.evaluate('document.body.scrollHeight');
await page.evaluate('window.scrollTo(0, document.body.scrollHeight)');
await page.waitForTimeout(1500); // Wait for content
const newHeight = await page.evaluate('document.body.scrollHeight');
if (newHeight === previousHeight) {
break; // No more content to load
}
}
اہم نکات
جب آپ JavaScript سے رینڈر ہونے والے مواد کے ساتھ کام کرتے ہیں:
- Performance: متحرک مواد کی scraping، جامد HTML کے مقابلے میں سست ہوتی ہے
- Resource Management: browser automation زیادہ system resources استعمال کرتا ہے
- Stability: loading states اور network conditions کو سنبھالنے کی ضرورت ہوتی ہے
- Rate Limiting: actions کے درمیان وقفے شامل کرنے پر غور کریں
بہترین عملی طریقے
- مناسب wait strategies استعمال کریں:
// Wait for specific elements
await page.waitForSelector('.selector');
// Wait for network idle
await page.waitForLoadState('networkidle');
// Custom wait conditions
await page.waitForFunction(() => {
// Custom JavaScript condition
});
- مضبوط error handling نافذ کریں:
try {
await page.goto(url);
// ... scraping logic
} catch (error) {
console.error('Scraping failed:', error);
} finally {
await browser.close(); // Always clean up
}
- قابلِ اعتماد نتائج کے لیے retry mechanisms نافذ کرنے پر غور کریں
- بڑے datasets کے ساتھ کام کرتے وقت memory usage پر نظر رکھیں
- extracted data کی consistency کی جانچ کریں
اپنے حل کی جانچ
test environment mock APIs فراہم کرتا ہے جو حقیقی دنیا جیسے حالات کی نقل کرتے ہیں:
- مختلف loading times
- network latency
- pagination mechanics
- error states
ان مختلف صورتوں کو آزمائیں:
- scroll timing میں تبدیلی کریں
- مختلف screen sizes کو سنبھالیں
- سست network conditions میں test کریں
- data integrity کی توثیق کریں
کیا آپ متحرک مواد کو سنبھالنے کے لیے تیار ہیں؟ challenge code اور test environments repository میں موجود ہیں۔
کام کرنے والی implementations کے لیے exercises/chapter-04/solution/src/ اور exercises/chapter-05/solution/src/ میں reference solutions دیکھیں۔ یاد رکھیں — جدید ویب scraping صرف HTML ساخت کو سمجھنے کا نام نہیں، بلکہ application behavior کو سمجھنا بھی اتنا ہی اہم ہے۔
scraping مبارک!