Puppeteer ile Veri Çekme (Web Scraping): Asenkron (Async/Await) Hataları Kesin Çözümü

0 Cavablar 5 Baxış
·
İştirakçılar
Mövzunu Açan #0
İnternet üzerinde veri toplamaya çalışırken, özellikle Puppeteer gibi tarayıcı otomasyon kütüphanelerinde, asenkron işlemlerle karşılaşmak oldukça yaygın ve bazen karmaşık olabilir. Bu noktada, async/await yapısının doğru kullanımı ve olası hataların önlenmesi, hem kodun stabilitesi hem de verimlilik açısından kritik önem taşır.

İlk olarak, Puppeteer temel olarak asenkron API’ler sunar; sayfa açma, tıklama, DOM’dan veri çekme gibi işlemler Promise döndürür. Bu durumda, her aşamada await kullanmak ve fonksiyonları async olarak tanımlamak şarttır. Aksi takdirde, işlemler tamamlanmadan devam eder ve hatalar kaçınılmaz olur. Örneğin:

CODE
123456789
async function fetchData() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://ornek.com');
  const veri = await page.evaluate(() => document.querySelector('h1').innerText);
  await browser.close();
  return veri;
}


Ancak, karşılaşılan yaygın sorunlar arasında, “Promise rejection” hataları, zaman aşımı (timeout) ve sayfa yüklenmemesi gibi durumlar bulunur. Bu noktada, hataları düzgün yönetmek için try-catch blokları ve uygun timeout ayarları kullanmak gerekir. Ayrıca, sayfa yükleme sırasında ‘waitUntil’ parametresi ile belirli DOM olaylarını beklemek, hataları azaltır:

CODE
1234567
try {
  await page.goto('https://ornek.com', { waitUntil: 'networkidle2', timeout: 30000 });
} catch (error) {
  console.error('Sayfa yüklenemedi:', error);
  // Hata durumunda alternatif işlem veya tekrar deneme
}


Bir diğer önemli nokta ise, async fonksiyonların çağrıldığı yerde await kullanımıdır. Unutulmamalıdır ki, ana fonksiyon da async olmalı ve çağrılırken await ile çağrılmalı:

CODE
12345
(async () => {
  const veri = await fetchData();
  console.log(veri);
})();


Sonuç olarak, Puppeteer ile veri çekerken asenkron işlemleri doğru yönetmek, hataların önüne geçer ve kodun güvenilirliğini artırır. Ayrıca, zaman zaman alınan hatalara karşı uygun hata yönetimi ve yeniden deneme stratejileri geliştirmek, özellikle büyük veri projelerinde hayati önem taşır. Bu noktada, asenkron yapıların doğru kullanımı ve hatalara karşı proaktif önlemler, başarılı web scraping operasyonlarının temelini oluşturur.

Cavab vermək üçün daxil olmalısınız.

0 sitat seçildi