JavaScript ile Web'den Veri Çekme (Web Scraping) - TeknolojikBakis.Com

JavaScript ile Web’den Veri Çekme (Web Scraping)

Genel admin 198 Okundu
sponsorlu reklam

Merhaba, bir süredir javascript ve node teknolojileriyle ilgileniyorum. Npm (Node Package Manager)’i incelerken çok güzel bir paket gördüm ve denedim. Sizle de paylaşmak istedim. Paketimizin adı Cheerio. Evet, cheerio ile Web Scraping gerçekten çok pratik. Ufak bir denememi sizle paylaşmak istiyorum. Öncelikle Cheerio ‘yu ve request paketlerini kuralım.

npm install cheerio request –save

Komutunu konsola yazarak cheerio ve request paketlerini kuruyoruz. Tabi, node’un bilgisayarınızda kurulu olması gerekiyor. Daha sonra editörümüzü açıyoruz ve app.js oluşturuyoruz.

İlk önce paketlerimizi dahil ediyoruz.

var request = require('request');
var cheerio = require('cheerio');

Ben ide olarak Vs Code kullanıyorum. Daha sonra request paketimizi kullanarak veri çekmek istediğimiz siteyi giriyoruz. ben Amatorfutbol.org sitesinden, Samsun amatör kümedeki maçları çekmek istedim.

request('http://www.amatorfutbol.org/askf/samsun/super-amator/puandurumu-5810.html',(error,response,html)=>{
 if(!error && response.statusCode==200){
........
}
}

Evet. gerekli url i giriyoruz ve response 200 koduyla dönüp herhangi bir hata görmediğimiz sürece kod blogunu doldurmaya başlıyoruz.

var $=cheerio.load(html);
        $('table#program tr.hucre').each(function (i,el){
            var metadata=
            {
                tarih:  $(this).find('td').slice(0,1).text(),
                saat:  $(this).find('td').slice(1,2).text(),
                yer: $(this).find('td').slice(2,3).text(),
                evsahibi: $(this).find('td').slice(4,5).text(),
                konuk: $(this).find('td').slice(6,7).text(),
                sonuc: $(this).find('td').slice(5,6).text()

            };
            console.log(metadata);

Kodlardan bahsetmem gerekirse. $ değişkenine html sayfasını load ettikten sonra JQuery seçicilerine benzer bir şekilde program id’li tabloyu seçip içindeki hucre class lı tr’leri çekiyorum. ve her biri üzerinde each fonksiyonuyla işlem yaptırmak istiyorum. 6 satır tr buluyor. ben her tr nin içindeki td leri find fonksiyonuyla arıyorum ve slice fonksiyonuyla keserek metadata değişkenine json verisi gibi atıyorum,

{ tarih: '20/01/2019',
  saat: '13:30',
  yer: 'Vezirköprü İlçe Sahası',
  evsahibi: 'Vezirköprü Belediyespor',
  konuk: 'Samsun Yolspor',
  sonuc: '0 - 1' }
{ tarih: '20/01/2019',
  saat: '13:30',
  yer: 'Bafra İlçe Stadı',
  evsahibi: 'Hacınabispor',
  konuk: '1930 Bafraspor',
  sonuc: '1 - 3' }
{ tarih: '20/01/2019',
  saat: '13:30',
  yer: 'Samsun 19 Mayıs Yan Saha',
  evsahibi: '19 Mayıs Belediyespor',
  konuk: 'Samsun İlkadım YAB-PA',
  sonuc: '5 - 3' }
{ tarih: '20/01/2019',
  saat: '14:00',
  yer: 'İlkadım İlçe Sahası',
  evsahibi: 'Samsun Türk Telekom',
  konuk: 'Termespor',
  sonuc: '1 - 3' }
{ tarih: '20/01/2019',
  saat: '14:00',
  yer: 'Dikbıyık Enver Yıldırım Stadı',
  evsahibi: 'Tekkeköyspor',
  konuk: 'Atakum Belediyespor',
  sonuc: '1 - 3' }
{ tarih: '20/01/2019',
  saat: '14:00',
  yer: 'Samsun Suni Çim Saha',
  evsahibi: 'Sporland Bahçelievlerspor',
  konuk: 'Karasamsunspor',
  sonuc: '1 - 2' }

Ekran çıktısına ulaşıyorum.Kodların tamamı ise şu şekilde oluyor:

var request = require('request');
var cheerio = require('cheerio');


request('http://www.amatorfutbol.org/askf/samsun/super-amator/puandurumu-5810.html',(error,response,html)=>{
    if(!error && response.statusCode==200){
        var $=cheerio.load(html);
        $('table#program tr.hucre').each(function (i,el){
            var metadata=
            {
                tarih:  $(this).find('td').slice(0,1).text(),
                saat:  $(this).find('td').slice(1,2).text(),
                yer: $(this).find('td').slice(2,3).text(),
                evsahibi: $(this).find('td').slice(4,5).text(),
                konuk: $(this).find('td').slice(6,7).text(),
                sonuc: $(this).find('td').slice(5,6).text()

            };
            console.log(metadata);
        });
    }
});

Çalıştırmak için tabiki

node app.js

Kullanıyoruz. Daha detaylı bilgi için cheerio’yu github‘da ziyaret edebilir, detaylı dökümantasyonu okuyabilirsiniz.

Sosyal Ağlarda Paylaş

“JavaScript ile Web’den Veri Çekme (Web Scraping)” üzerine 1 yorum

  1. cemiyet dedi ki:

    hocam bunu biraz kendime uyarladım:
    var metadata=
    {
    gün: $(this).find(‘.day’).slice(0).text(),
    ay: $(this).find(‘.month’).slice(0).text(),
    duyuru: $(this).find(‘a’).slice(0).text()
    };

    ama çıktısında gün tırnak içinde geliyor. neden acaba?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir