15 Bin Web Sayfasını Kazıyarak Ne Öğrendim?
Veri kazımak yeni bir şey değil ve oldukça yaygın bir tekniktir. Yine de herhangi bir analiz ya da içerik toplama işlemi için en değerli veri toplama yollarından biridir. Ayrıca bunu doğru bir şekilde yapmanın tek bir yolu yoktur. Bu yüzden en iyi uygulamayı kullandığınızdan, etik davrandığınızdan ve sıklıkla mantığınızla deneyimlediğinizden emin olun. James Densmore, webden veri kazıma tecrübelerini, dikkat edilecek noktaları ve kullandığı araçları anlatıyor.
İnternet’in büyük şemasında 15.000 web sayfa kovanın içindeki bir damladır. Yine de, çok çeşitli sayfada yapılan kaynaklandırma ve veri çekme işlemleriyle birçok şey öğrenebilirsiniz. Veri bilimle ilgili ilginç içeriğimizi bulmak ve tweetlemek için, birçok potansiyel makale, video ve blog gönderilerini bir araya getirmek zorunda kaldım. Ardından daha da bilgi almak için, bunlardan da veri çekimi yaptım. İşte bu süreç içerisinde edindiğim bilgilerden birkaçı:
Veri kazımak için web sayfası bulmak ayrı bir iştir
Yukarıda URL’leri nasıl tedarik ettiğimle ilgili konuştum, ama ilk adımı atmak başta düşündüğümden daha zordu. Ana kaynaklarımdan biri Twitter’da yayınlanan linklerdi. Aslında bu iyi bir başlangıç fakat bunun da dezavantajları var.
İnsanlar tweet’lerinde çoğunlukla alakasız ya da hiçbir bağlantısı olmayan URL’ler paylaşıyor. Ne de olsa Twitter, link paylaşmaktan daha farklı amaçlarla kullanılmaktadır.
Özellikle Bazı başlıklar ve anahtar kelimeler “spam” linklere neden olmaktadır. Örneğin Twitter’da “yatırımcılık” ve “uzaktan çalışma” üzerine araştırma yaparsanız kolay yoldan zengin olma üzerine birçok tasarı bulacaksınız. Benim durumumda bu linklerin hiçbir değeri yok.
Çok sayıda insan benzer URL’leri tweetlemekte, bu yüzden kısa sürede çok veri toplamak istediğinizde belirgin olanları ayırt etmek gerçekten çok zor.
Ardından gidilebilecek URL bulmanın birçok yolu vardır. Biraz kendini yeniliyor gibi görünmekte ama bazı siteleri araştırarak, URL toplayarak ve sonra da bu URL’leri araştırarak bunu başarabilirsiniz. YouTube, Reddit, favori bloglarınız ve RSS yayınları bu konuda iyi sonuç verecektir.
Bu süreçte veri kazıma sınırlarını zorlayacak ve bazı kişileri kızdıracaksınız.
Veri kazımayı Python’da yazdım ve çoğunlukla gelen taleplere ve Beautiful Soup paketlerine sırtımı dayadım. Sizlere kutudan çıkmasını istediğiniz şeyi vermezler ama gerçekten mükemmel bir yapı taşıdır. Sizlere herhangi bir URL’yi talep etme, sonuç HTML’ini kapıp ondan istediğinizi çıkarma gücünü verirler. Kulağa kolay geliyor değil mi? İşte bu süreç içerisinde yaptığım hataları ve yetersiz varsayımlar:
İnsanların büyük boyutta dosyaları içeren linkler paylaşmasını beklemiyordum. Hepimiz Twitter’da ve Reddit’te blog gönderileri ve makaleler paylaşıyoruz. Peki ya ZIP dosyaları, Google Docs ve devasa PDF’ler? Yani ben paylaşmıyor ama görünen o ki bunu yapanlar var. Eğer gidip bütün o verileri bir Beautiful Soup dosyasına yüklemeye kalkarsanız, parasını ödersiniz. Bu, host servisinin bana dostane bir mail atıp işlerimden birini sonlandırdıklarını ve daha dikkatli olmam gerektiğini söyledikleri birçok zamandan biriydi. Ufak bir not: paylaşımlı bir sunucudan özele geçmek çok daha mantıklı.
Devasa dosyalardan kaçınmanın hızlı ve kirli bir yolu var, ancak içerik uzunluğu özelliği başlıkta tekrar gözükmezse ya da değeri doğru değilse bir tuzağa düşebilirsiniz. (bu gerçekten yaşanıyor)
Birçok site veri kazıyanları uzak tutmak için ellerinden geleni yapıyor fakat birçoğu bunu yapmıyor. Bir süre önce, Veri Kazımanın Etikleri adında bir makale yazdım. Bu makalede veri kazırken site sahiplerine saygı duymanın yanı sıra bir site sahibi olarak da veri kazıyanlara saygı duymanın en iyi yollarını işledim. Beni şaşırtan şey, site sahiplerinin büyük çoğunluğu (%99’un üzerinde) oldukça makuller ve sitelerine zarar vermediğimiz sürece veri kazımaya izin veriyor. Fakat başlıklarınızı bir insan gibi görünmek için taklit etmediğiniz sürece sizi engelleyecek birileri var. Ancak ben yine de dürüst olmayı ve kendimi doğru bir şekilde tanımlamayı tercih ediyorum. Bu 15.000’in üzerindeki sayfanın veri kazımada, mail aracılığıyla başlık için talepte bulunmama rağmen site sahipleri en ufak bir temasta bulunmadılar.
Dışarıda erişebileceğiniz birçok sayfa var
Üstünden geçtiğim 15.000’in civarında URL’de, 3.000 üzerinde domain vardı. Tanınan sitelerden daha baskın olmamasına şaşırdım. Aslında sonuçları görmek biraz rahatlattı. Bunun veri bilimle ilgili ilginç içerikler için olduğunu unutmayın. Yani Wall Street Journjal gibi bazı “büyük” siteler bu bağlamda nadirdir, ancak yine de bu kişisel blogların ve diğer sayfaların bu kadar çeşitli olmasını beklemiyordum. Şimdi de dağılıma küçük bir bakış atalım.
Daha çok sayfanın Open Graph’i desteklemesini ve Open Graph’in yeterli olmasını isterim
Eğer bir web sayfasından ortak meta-veri almak isterseniz, Open Graph sizin için bir lütuftur. Eğer Open Graph’i hiç duymadıysanız, sosyal ağlarda URL paylaşmayı oldukça kolay ve tutarlı olmasını sağlayan odur. Bir makaleyi Twitter’da paylaştığınızda başlığı, yazarı ve görselinin olmasın mı istiyorsunuz? Bu özellikleri HTMLE’den Open Graph protokolünde tanımlandığı gibi direkt alın ve yolunuza devam edin.
Kötü Haber?
- Veri kazıdığım sayfaların yalnızda %80’i Open Graph’i destekliyor
- Eğer derin bir analiz yapıyorsanız, ihtiyacınız olan her şeyi Open Graph özelliklerinden elde edemezsiniz. Başlık, yayınlanma tarihi ve görsel paylaşımı gerçekten başarılı, ancak benim gibi veri delisiyseniz, ihtiyacınız olan hammaddeyi elde etmek için HTML’den daha çok çıkarmanız gerekir. Bu başka bir zamana bırakılması gereken bir konu, ancak standartların eksikliği çok büyük bir zorluk teşkil etmekte.
Ücretli üyelikleri kafanıza takmayın
Başlangıçta iyi bilinen ücretli üyelik gerektiren sayfaları atlamayı düşünmüştüm, ancak bu sayfalardan özet ve anahtar kelimelerin yanı sıra en azından temel meta-veriyi (çoğunlukla Open Graph özellikleri) elde edebilirsiniz. Ve korkmayın, sayfa sahipleri sıkıntı çıkarmaksızın halka açık bir şekilde temin ettiklerinden veri çekmenize hazırdır.
Veri kazıma mantığınızı sıklıkla gözden geçirin
Veri kazımayı ilk kurduğumda ve ardından URL’leri beslediğimde, birkaç yazılım hatasının üzerinde çalıştım ve sonra patlak veren kadar birkaç gün gözetimsiz kalmasına izin verdim. Farkına varmadığım şey ise, birçok değerli veriyi gözden kaçırmış olmamdı ve geliştirme yaptıkça yeniden veri kazımak zorunda kaldım.
Örneğin bazı sayfalar Open Graph’i desteklemiyor, ancak ihtiyaç duyarsanız alabileceğiniz yedek elementler bulunmaktadır. İçeriğin başlığı buna güzel bir örnektir. Bunu Open Graph’te tanımlanan theog:title özelliğinden almayı tercih ederim, ancak orada da değilse genellikle işinizi görür.
Buna ek olarak, yukarıda belirttiğim büyük boyuttaki dosyalarla uğraşırken mantığımı değiştirmem gerektiğinin farkına vardım. Yükleyip ayrıştırmadan önce sayfanın başlığında content-lenghtproperty’i kontrol etmeyi tavsiye ettim. Ayrıca bütün sayfaların başlıkta bu özelliğe dönmediklerini de not ettim. Eğer tam anlamıyla güvende olmak istiyorsanız, bu özelliğe sahip olmayan bütün sayfaları görmezden gelin. Risk almak isterseniz de, bu şekilde çalışmak zor olsa da parça parça okumayı deneyin.
Çeviren: İrem Oran / VOYD YK Üyesi /
https://www.voyd.org.tr/tr/blog/192/15-bin-web-sayfasini-kaziyarak-neler-ogrendim
Çevirilen Metin : James Densmore / What I learned from scraping over 15,000 web pages