İçeriğe geç

Web Crawling

Web Crawler, Web Spider, Robot veya Bot hangi isimle hitap ederseniz; hepsi aynı anlama gelmektedir ve yaptıkları iş de aynıdır.

Bot kelimesi kullanılmasını pek sevmiyorum. Çünkü bu yapılan iş için konulabilecek daha güzel kelimeler var.

Web Crawling ile programsal anlamda ilk defa 2 yıl önce tanıştım. Daha önce böyle bir alandan haberdardım lakin bu konuda bir çalışmam olmamıştı fakat bir telefonla mecburen bu alana mecburi bir giriş yaptım.

Daha önce hiç çalışmadığım (freelance olarak), İstanbul merkezli bir firma bana ulaşarak; ellerinde 39 adet web platform listesi (evet, bu listedeki çoğu platformu yakından biliyorsunuz. Hepsi Türkiye’de kullanılan ve belirli bir alanda hizmet veren platformlar) olduğunu ve bu platformlardan istedikleri verilerin olduğunu söylediler (bu verilerin neler olduğunu tabi ki belirli nedenlerden dolayı söyleyemem). Velhasıl kelam telefonda bir rakama anlaştık ve bu iş için hazırladığım uygulamayı kendilerine teslim ettim. En son konuştuğumuzda; bu yazılımı bir Rasperry Pi üzerinde 7 / 24 çalıştırdıklarını ve yeni belirledikleri platformları da uygulamaya dahil ettiklerinden bahsettiler. Sanırım bu işten iyi para kazanıyorlar..! Kendileriyle daha sonra da çalıştık fakat hepsi sıradan işlerdi. Ben daha sonra hazırladığım Web Crawler’ı güncelledim…güncelledim…güncelledim ve bu konular da oldukça uzun araştırmalar yaptım, deneyim kazandım.

Aslında konuya hafiften bir giriş yaptık ve üstü kapalı da olsa Web Crawler kavramına değindik. Peki Web Crawling nedir? Şimdi bu soruya cevap arayalım.

Web Crawling Nedir?

Web Crawling, HTTP bağlantısı ile herhangi bir site üzerinde gezinmek ve hedef site üzerinde yeralan linkleri toplamaktır. Bu linkler tüm site olabileceği gibi sınırlı sayıda da olabilir. İşte bu link toplama işlemini yerine getiren yapıya da Web Crawler denilmektedir.

Şimdi Google’ı düşünelim. Bir kaç tıklama ile önümüze dünyayı getirmektedir. Peki bunu nasıl yapmaktadır? Google sahip olduğu crawler’lar ile tüm siteleri (1.5 milyar olduğu tahmin edilmektedir) gezinmekte ve analiz etmektedir. Elde ettiği sonuçları işlemekte ve ortaya da SEO alanı çıkmaktadır.

Web Crawler yazımı basit gibi görünse de oldukça zor ve iyi bir analiz çalışması gerekmektedir. Öyle olmasa; Google, 2 milyar satır koddan oluşmazdı..!

Çalışma Mantığı

Web Crawler’ların çalışma mantığı karmaşıktır ama iyi bir analiz ve sistemli çalışma ile ortaya güzel bir sonuç çıkarılabilir.

Öncelikli olarak; veri almak istediğiniz site veya platformu belirlemeniz gerekir. Belirleme işleminden sonra hedefteki bu adresin iyi analiz edilmesi gerekir. Analizden kastım; verilerin bulunduğu sayfalardır. Bu sayfaların kurulma ve dolaşım şeması detaylı olarak incelenmelidir. Örneğin; bazı platformlar size istediğiniz verileri hemen göstermezler. Bir butona veya text’e tıklamanızı veyahut bir şeyleri sürükleyip bırakmanızı isteyebilirler. Bunların hepsi birer handikaptır ve çözülmesi gereken birer sorundur.

Web Crawler’ın temelde yapacağı şey şudur; belirlenen adresin tüm linklerini taramak ve listelemektir. Daha sonra da listelediği bu linklere sırasıyla gider. Bu işlemi otomatize etmekte Web Crawler kavramını doğurur.

Linklerin listeleme işlemi; ilk olarak tüm adreslerin taranması olabileceği gibi önerilen ise kök dizinden başlayıp sayfa sayfa gezmek ve gezdiği her sayfadaki linkleri kuyruğa ekleyip o sayfadan listedeki diğer linklere geçmektir. Yani bir nevi kuyruk oluşturmaktır. Burada kaynak nokta tabi ki de kök adres olacaktır. Örneğin; https://emrecanoztas.com adresinden başlayıp sayfa sayfa gezmek ve bulunan linkleri kuyruğa eklemek. Gezinme işlemi sırasında da gerekli veriler toplanır ve alınır. Bu işleme de Web Scraping denir. Bu konuya da bir başka yazıda detaylı olarak değineceğiz.

Programlama Dili Seçimi

Web Crawler herhangi bir programlama dili ile yazılabilinir. Lakin bazı diller diğer dillere göre bu alanda bariz üstünlükleri var. Zaten her programlama dili her alanda başarılıdır diye bir felsefe söz konusu değildir. Yine Google örneğini verecek olursak; Python, Google’ın ana çekirdeğinin büyük bir kısmını oluşturmaktadır.

Bu alanda dünyadaki trendlere de bakacak olursak; genelde Python tercih edilmektedir. Çünkü; Python sahip olduğu çeşitli library (kütüphane)‘ler ile yapılacak olan işleri oldukça kolaylaştırmıştır. Python oldukça hızlı çalışmaktadır ve programlanması kolaydır. Zaten Python’un geliştiricisi olan Guido van Rossum eski bir matematikçidir. Python’u geliştirmesindeki amaçlardan birisi de; hesaplamalar ve veri analizidir. Dolayısıyla Python iyi bir seçim olacaktır.

Python dışında; Web Crawler alanında kullanılan diğer popüler bir dil de Java’dır. Java tabiki çok büyük bir ekosisteme ve teknolojiye sahip programlama dili. Özellikle; Big Data alanında kullanılan bir dil için Web Crawler, sanırım çerez kalacaktır.

Daha önce de dediğimiz gibi; herhangi bir dil ile Web Crawler yapılabilinir lakin doğru programlama dili her zaman önemlidir. Dolayısıyla; size önerim; trend olan programlama dillerinden birisi ile bu işlemi gerçekleştirmenizdir.

Dikkat Edilecek Hususlar

Her şey tamam ve bir Web Crawler’ınızın olduğunu varsayalım. Buraya kadar olan kısım sadece tasarım ve kodlamadan ibaret olacaktır.

Bir web sitesini hedef aldınız ve gerekli olan alanları işaretlediniz. Her şey çok güzel..! Lakin hayat bu kadar toz pembe değil! Web Crawling sırasında dikkat edilmesi gereken çok önemli hususlar vardır. Bu hususlardan da bahsetmemiz belki de en kritik konu olacaktır. Çünkü bu işi yaklaşık 2 yıldır yapıyorum ve hala çeşitli sorunlarla karşılaşıyorum.

Veri almak istediğiniz platform veya web sitesi; bazen sizin sitede rahat gezinmenizi istemez. Bunun nedeni de tabi ki; kendi verilerinin sizin elinize geçmesini istemedikleri içindir. Bu da pek tabi en doğal haklarıdır. Fakat unuttukları en büyük şey; “Bilgi kurumsaldır ve saklanamaz!”. Hack’lenemeyecek sistem, veri alınamayacak site yoktur. İnsanoğlunun elinin değdiği şeyde mükemmellik aranamaz!

Herhangi bir platformda gezinmek için ilk yapmanız gereken şey; kendinizi olabildiğince gizlemektir. Bunun çeşitli yöntemleri var. Örneğin; kendinizi Google, Yandex veya Bing‘ten gelen bir Crawler olarak gösterebilirsiniz. Bu cidden oldukça etkili bir yöntem. Bu sayede hedeflediğiniz platform size %99 ihtimalle inanacak ve rahatlıkla gezinmenize izin verecektir.

Diğer bir yöntem de gezinme aralıkları belirlemeniz. Örneğin; gezinme aralığı için 1 saniye belirleyebilirsiniz. Bu sayede sistem sizi normal bir kullanıcı gibi algılayabilir. Ama bu işin tabi ki de bir garantisi yoktur. Aralığı da uzun tutmanız; alınacak olan verilen gecikmesine neden olur. Düşünsenize; basit bir sayfa için 1 saniye bekliyorsunuz ve 1 dakikada yalnızca 60 sayfa gezintisi yapabiliyorsunuz. Oldukça sinir bozucu bir yöntem! Dolayısıyla; bu yöntemi kesinlikle önermiyorum. Eğer; Multithread kullanacaksanız; bu bir nebze olsun tolere edilebilir. Burada da karşınıza; bilgisayarınızın donanımsal özellikleri çıkacaktır. Yetersiz bir donanıma sahipseniz; bu işinizi zorlaştıracaktır.

Size önerebileceğim bir başka yöntem de; IP değiştirilmesi. Hedeflediğiniz platform üzerinde belirli bir sayfa / zaman diliminde gezindiniz. Sistem sizi farketmeden; IP değiştirerek sisteme yeni gelen bir kullanıcı gibi davranabilirsiniz. Bu da oldukça etkili bir yöntem fakat devamlı IP değiştirilmesi bir süre sonra sıkıcı bir hal alabiliyor. O yüzden zor da kalınmadığı sürece IP değiştirerek kullanılması da pek mantıklı olmayacaktır.

Web Crawler’da amaç; sisteme yakalanmadan verileri alabilmektir. Sisteme yakalandığınız zaman dışarı atılırsınız. Ne kadar kötü bir durum değil mi?! O yüzden sessiz olmalı ve gerekenleri alıp, kimsenin haberi olmadan çıkmasını bilmelisiniz.

Son bahsetmek istediğim konu ise; hedef şaşırmak. Evet, crawling yaparken en çok dikkat edilmeyen ve en baş ağrıtıcı konu da bu olsa gerek. Hedeflediğiniz adres dışına çıkmamalısınız ve yalnız o adresin sahip olduğu linkleri takip etmelisiniz. Yani o adresin sınırları içerisinde kalmalısınız. Hedef adres, tabi ki dış adreslere linkler vermiştir. Örneğin; facebook, instagram, twitter veya diğer herhangi bir site(ler). Eğer buna dikkat etmez iseniz; hazırladığınız crawler yolunu şaşırır ve belirlenen adres dışına çıkabilir. Mesela crawler’ınızı x bir adreste başıboş gezerken bulabilirsiniz. Bunun olmaması için de tabi ki önlemler alınma ve sınırlar çizilmelidir.

Kullanılabilecek Web Crawler Kütüphaneleri

Çeşitli programlama dilinde yazılmış olan kütüphaneleri uygulamanıza dahil edebilirsiniz. Bu konuda oldukça etkili kütüphaneler bulunmaktadır. Bunun dışında kendiniz de bu işlemi gerçekleştirebilirsiniz. Seçim size kalmış durumda..!

Java için kullanabileceğiniz en iyi kütüphane: jSoup. jSoup şu ana kadar ki karşılaştığım en güzel Web Crawling kütüphanesi diyebilirim. Kullanımı oldukça basit ve çok etkili. Buradaki sayfaya girdiğiniz de zaten ne demek istediğimi anlayacaksınız. jSoup dışında; crawler4j, Apache Tika ve jSpider. Buradan tam listeyi görebilirsiniz.

Python için kullanabileceğiniz en iyi kütüphane: Scrapy. Scrapy oldukça güzel ve hızlı çalışan bir yapıya sahip. Kısacası; Python ile bir Web Crawler yazacaksanız kesinlikle öneririm.

PHP için de bir çok alternatif var fakat şunu öneririm diyemiyorum çünkü uzun zamandır PHP ile Web Crawling yapıyorum fakat etkili bir kütüphaneye rastlayamadım ya da ben göremedim, bilmiyorum. Bunun yerine; kendi oluşturduğum yapı ile crawling işlemlerimi gerçekleştiriyorum.

PHP için bir kütüphane kullanımında ısrarcıysanız aşağıdaki kütüphaneleri inceleyebilirsiniz.

Bu yazıda; Web Crawler konusundan detaylıca bahsetmeye çalıştık. Yazı boyunca devamlı vurguladığım iki şey var. Bunları tekrarlamak istiyorum. Birincisi; Web Crawler, tasarımı ve uygulaması karmaşık bir yöntemdir. Oldukça dikkatli olunmalı ve iyi bir analiz çalışması yapılmalıdır. İkincisi ise; sisteme yakalanmamak. Sistemin haberi olmadan rahatça gezinmeli ve istenilen veriler alınıp, sessizce terkedilmelidir.

İlerleyen yazılar da bu konudan tekrar bahsedeceğim ve örnek bir uygulama geliştireceğim. Umarım herkes için faydalı bir yazı olmuştur.

Saygı ve muhabbetle!..

Bu içeriği paylaşmak ister misiniz?

İlk Yorumu Siz Yapın

Bir cevap yazın

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

Buradaki içeriklerin tümü kamu malıdır. Kullanılması ve paylaşılması özgürdür.