Puppeteer ile Node.js Kullanarak Farklı Web Sitelerinden Veri Çekme: Örnekler ve Kodlar

05 Nisan 2023 363 Okuma süresi: 5 dakika

Node.js ve Puppeteer kullanarak farklı sitelerden veri çekmek için aşağıdaki kod örneklerini kullanabilirsiniz:

İlk olarak, Puppeteer'ı kurmak için aşağıdaki komutu kullanabilirsiniz:

npm install puppeteer

Ardından, veri çekmek istediğiniz web sitelerine göre Puppeteer'ı kullanarak kodlar yazabilirsiniz.

Örneğin, https://www.nike.com/ adresindeki ürünlerin fiyatlarını almak için aşağıdaki kodu kullanabilirsiniz:


const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.nike.com/');
  await page.type('#TypeaheadSearchInput', 'shoes'); // arama kutusuna 'shoes' yazın
  await page.keyboard.press('Enter'); // Enter tuşuna basın
  await page.waitForSelector('.product-card__price'); // fiyatlar yüklenene kadar bekleyin
  const prices = await page.evaluate(() => {
    const priceElements = Array.from(document.querySelectorAll('.product-card__price'));
    return priceElements.map(priceElement => priceElement.textContent);
  });
  console.log(prices);
  await browser.close();
})();

Bu kodda, öncelikle Puppeteer'ı başlatıyoruz ve Nike web sitesine gidiyoruz. Daha sonra, arama kutusuna 'shoes' yazıp Enter tuşuna basarak arama sonuçlarını yüklüyoruz. Son olarak, fiyatları almak için .product-card__price sınıfına sahip tüm öğeleri seçiyoruz ve fiyatlarını bir dizi olarak döndürüyoruz.

Benzer şekilde, https://www.amazon.com/ adresindeki ürünlerin fiyatlarını almak için aşağıdaki kodu kullanabilirsiniz:


const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.amazon.com/');
  await page.type('#twotabsearchtextbox', 'laptop'); // arama kutusuna 'laptop' yazın
  await page.keyboard.press('Enter'); // Enter tuşuna basın
  await page.waitForSelector('.s-result-item .a-price-whole'); // fiyatlar yüklenene kadar bekleyin
  const prices = await page.evaluate(() => {
    const priceElements = Array.from(document.querySelectorAll('.s-result-item .a-price-whole'));
    return priceElements.map(priceElement => priceElement.textContent);
  });

  console.log(prices);
  await browser.close();
})();

Bu kodda da, öncelikle Puppeteer'ı başlatıyoruz ve Amazon web sitesine gidiyoruz. Daha sonra, arama kutusuna 'laptop' yazıp Enter tuşuna basarak arama sonuçlarını yüklüyoruz. Son olarak, fiyatları almak için .s-result-item .a-price-whole sınıfına sahip tüm öğeleri seçiyoruz ve fiyatlarını bir dizi olarak döndürüyoruz.

Bu örneklerde, Puppeteer'ı kullanarak farklı sitelerden veri çekmek için birkaç tane daha örnek verebilirim.

Örneğin, https://www.imdb.com/ adresindeki en popüler filmlerin isimlerini almak için aşağıdaki kodu kullanabilirsiniz:


const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.imdb.com/');
  await page.click('#imdbHeader-navDrawerOpen--desktop'); // navigasyon menüsünü açın
  await page.click('#imdbHeader-navDrawer > div > div:nth-child(2) > div:nth-child(2) > a'); // En Popülerler sayfasına gi
  await page.waitForSelector('.titleColumn'); // filmler yüklenene kadar bekleyin
  const movieTitles = await page.evaluate(() => {
    const titleElements = Array.from(document.querySelectorAll('.titleColumn a'));
    return titleElements.map(titleElement => titleElement.textContent.trim());
  });
  console.log(movieTitles);
  await browser.close();
})();

Bu kodda, öncelikle Puppeteer'ı başlatıyoruz ve IMDb web sitesine gidiyoruz. Daha sonra, navigasyon menüsünü açarak En Popülerler sayfasına gidiyoruz. Son olarak, .titleColumn sınıfına sahip tüm öğeleri seçiyoruz ve filmlerin başlıklarını bir dizi olarak döndürüyoruz.

Başka bir örnek olarak, https://www.airbnb.com/ adresindeki New York'taki en popüler konaklama yerlerinin adlarını almak için aşağıdaki kodu kullanabilirsiniz:


const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.airbnb.com/');
  await page.type('input[data-testid="structured-search-input-field-location"]', 'New York'); // arama kutusuna 'New York' yazın
  await page.keyboard.press('Enter'); // Enter tuşuna basın
  await page.waitForSelector('.k7lz35f6'); // konaklama yerleri yüklenene kadar bekleyin
  const placeNames = await page.evaluate(() => {
    const nameElements = Array.from(document.querySelectorAll('.k7lz35f6 a'));
    return nameElements.map(nameElement => nameElement.textContent.trim());
  });
  console.log(placeNames);
  await browser.close();
})();


Bu kodda da, öncelikle Puppeteer'ı başlatıyoruz ve Airbnb web sitesine gidiyoruz. Daha sonra, arama kutusuna 'New York' yazıp Enter tuşuna basarak konaklama yerlerinin sonuçlarını yüklüyoruz. Son olarak, .k7lz35f6 sınıfına sahip tüm öğeleri seçiyoruz ve konaklama yerlerinin adlarını bir dizi olarak döndürüyoruz.

Bu örneklerde, Puppeteer'ı kullanarak farklı web sitelerinden veri çekebileceğinizi gösterdim. Ancak, her web sitesi farklı HTML yapısına ve CSS sınıflarına sahip olabilir, bu nedenle her bir web sitesi için özel olarak kod yazmanız gerekebilir. Ayrıca, web sitelerinin botlara karşı korunma önlemleri alması da mümkündür. Bu önlemler arasında CAPTCHA doğrulaması, botların engellenmesi veya IP adreslerinin engellenmesi gibi şeyler bulunabilir.

Benzer makaleler