Web crawling, internet sitelerindeki sayfalarda dolaşılıp, istenen bilgilerin derlendiği bir programlama tekniği olarak özetlenebilir. Öncelikli olarak şunu belirtmek gerekir ki, API si olan bir web sitesine web crawling yapmak iyi bir fikir değildir. API yi kullanmakta hem site sahibi için hem de bu bilgilere erişmek isteyenler için büyük fayda vardır.
Bu işin değişik aşamalarında kullanılan bir çok yazılım kütüphanesi ve çözüm bulunmakla birlikte, bu yazıdaki amacımız bu işin teknik altyapısını çok detaya girmeden verebilmektir.
Başlangıç aşamasında, veri işlemesi için uygun, internette dolaşma konusunda yetenekli komutlar sunan, değişik sistemlerle entegre çalışabilen bir programlama diline ihtiyaç vardır.
Bunun yanında bu işlem sırasında kullanılmak üzere
bilgilerin kolayca saklanabildiği ve alınabildiği yüksek performanslı, mümkünse
açık kaynak kodlu ücretsiz bir veritabanına da ihtiyaç duyulacaktır. Verilerin son haline getirildikten sonra saklanılacağı bir
veritabanı bir önceki veritabanı ile aynı olabileceği gibi farklı da
olabilir.
Olası bir kombinasyon şöyle olabilir; programlama dili
olarak Python, veri işleme için Redis DB, verilerin son
halini saklamak için Redis Db kullanılabileceği gibi, MongoDB de iyi bir
alternatif olabilir. Tabii isteyen alışık olduğu ilişkisel veritabanı sistemi
(RDMS ) ne ise onu da kullanabilir ama performans olarak diğerleri kadar memnun
olmayacağını söyleyebiliriz.
İşlemin detayına kısaca bakacak olursak, öncelikli olarak
istenen web site veya sitelerinin sayfa sayfa taranıp okunması işleminin
yapılması gerekmektedir. Bu işlem ile sayfaları daha sonra işlemek üzere diske
kaydedip işlemek, yada okunurken işlemek tercih edilebilir. İkisinin de
kendisine göre artı ve eksileri mevcuttur. Buna karar vermek için ele alınan problemle ilgili detaylar
gerekmektedir. Biz yazıyı kısa tutmak için bu detaylara girmeyeceğiz.
Verinin web sayfalarını okuma sırasında yada lokal diske
yazıldıktan sonra işlenmesi için iki temel yöntem vardır.
Birincisi, gelen sayfaların RegEx gibi string işleme
komutları ile işlenmesi, sayfadaki telefon bilgilerinin çıkarılması bu kapsamda
ele alınabilir. Bu yöntemin zorluğu bütün sayfa bir string olarak alındığı
için veri içindeki ilişkilerin dışlanmasının sıkıntılarıdır. Telefon u bulduk
ama bu telefon kimin acaba gibi ?
İkincisi, web sayfaları HTML daha da genel olarak XML
formatında olduğu için, parsing denen özel bir veri işleme tekniği kullanılarak
web sayfa verilerinin işlenmesidir. Bu işleme yönteminde, web sayfasını HTML tag larından
tamamen sıyırıp, sadece veriyi alabilmek mümkün olmakla birlikte, sakıncalı
tarafı veri içindeki hiyerarşinin ortadan kaybolmasıdır.
Diğer bir yaklaşım ele alınan web sayfasındaki gereksiz
taglardan kurtulup, mümkün olduğunca hiyerarşik bilginin korunduğu bir temizlik
yapılması durumudur. Bu durumda istenen bilginin doğru şekilde alınması açısından
en ideal duruma yaklaşılmış olacaktır. Bu adımda elde edilen XML veya HTML yapısı parser
kullanılarak bir bellekteki bir veri yapısına yerleştirildiği için, bu tür veri yapılarını
sorgulamak için özel olarak geliştirilmiş olan ve XML dünyasının SQL i denebilecek XPATH ve XQUERYsorgulama dilleri kullanılarak istenen bilgilerin alınması mümkündür.
Tabii burada herhangi bir web sayfasına özel yapılan her
işlem sadece o sayfa için geçerli olacağı için, iyi ve efektif bir veri işleme
için mümkün olduğunca sayfaya özel işlemden kaçınmak gerekmektedir.
Burada çok genel hatları ile çizdiğimiz sürecin her bir adımı ayrı bir yazı konusu olabilecek derinliktedir.
Hakan Sarıbıyık
Yorumlar