Web Scraping: Python ile Web'den Veri Çekme Yöntemi
Beceri rehberi

Web Scraping: Python ile Web'den Veri Çekme Yöntemi

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Python ile web scraping adımları: statik sayfa çözümleme, dinamik içerik, API ile veri toplama, depolama, otomasyon ve hukuki çerçeve.

Web scraping nedir, ne zaman gerekir?

Web scraping, bir web sayfasındaki bilgileri programla okuyup yapılandırılmış veriye (tablo, dosya, veritabanı) dönüştürme işlemidir. Örneğin farklı sitelerdeki ürün bilgilerini, ilan başlıklarını ya da haber metinlerini tek bir tabloda toplamak için kullanılır.

Önce şu soru sorulmalıdır: aynı veriye başka bir yoldan ulaşılabilir mi? Site resmî bir API sunuyorsa, veri toplamak için en doğru yol budur; hem daha kararlıdır hem de siteye zarar vermez. Kazıma, ancak veri başka yolla alınamıyorsa ve izin verilen sınırlar içinde kalınabiliyorsa tercih edilir.

Hukuki ve etik çerçeve

Teknik olarak mümkün olan her veri toplama işlemi hukuken ya da etik olarak serbest değildir. Başlamadan önce sitenin kullanım şartlarını, robots.txt dosyasını ve toplayacağınız verinin niteliğini kontrol edin. Kişisel veri içeren sayfalarda KVKK gibi mevzuat devreye girer; telif hakkıyla korunan içeriğin yeniden yayımlanması ayrı bir sorundur.

Etik uygulama kuralları: • Siteyi yormamak için istekler arasına bekleme koymak • Kendinizi tanıtan bir istemci kimliği kullanmak • Yalnızca gerçekten ihtiyaç duyulan veriyi toplamak • Şüpheli durumda hukuk danışmanına sormak

Bu bölüm hukuki tavsiye değildir; kurumsal projelerde hukuk birimi ile birlikte karar verilmelidir.

Statik sayfalardan veri çekmek

Statik sayfalarda içerik, sunucudan gelen HTML'in içindedir. Akış üç adımdır: sayfa HTTP isteğiyle indirilir, HTML bir çözümleyiciyle (BeautifulSoup gibi) ağaç yapısına çevrilir, aranan öğeler etiket, sınıf ya da seçici kuralıyla bulunup metni ya da özelliği alınır.

Geliştirici araçlarındaki inceleme paneli bu işte en değerli yardımcıdır: hedef öğeye sağ tıklayıp yapısını görür, ona özgü ve sayfa değişse bile kırılmayacak bir seçici seçersiniz. Çok sayfalı listelerde sayfa numarası ya da sonraki bağlantı izlenerek döngüyle tüm sayfalar gezilir.

Örneğin bir kitap listesi sayfasında her kitap bir kutu içinde yer alır. Önce kutuların ortak seçicisini bulun, sonra kutunun içinden başlığı ve bağlantıyı ayrı alanlar olarak okuyun, ardından alanları tabloya satır satır yazın. Bir alan bazı kutularda eksikse kodun hata vermek yerine boş değer yazması gerekir.

Dinamik ve JavaScript ile oluşan içerik

Bazı sayfalarda içerik, ilk HTML ile gelmez; tarayıcıda JavaScript çalıştıktan sonra yüklenir. Bu durumda basit bir istek boş bir iskelet döndürür. İki yol vardır.

Birincisi, geliştirici araçlarının ağ sekmesine bakıp sayfanın veriyi hangi iç isteğe çektiğini bulmak ve doğrudan o isteği taklit etmektir; çoğu zaman JSON döner ve çözümlemesi kolaydır. İkincisi, Selenium gibi bir tarayıcı otomasyon aracıyla gerçek tarayıcıyı programla yönetmek, sayfanın yüklenmesini beklemek ve içeriği o zaman okumaktır. İkinci yol daha yavaş ve kaynak tüketicidir; ilk yol mümkünse tercih edilir.

Ağ sekmesinde sayfayı yenilerken istek listesini inceleyin; veri taşıyan yanıt çoğu zaman yapılandırılmış biçimde döner ve doğrudan çözümlenebilir. Bu isteği bulduysanız tarayıcı otomasyonuna ihtiyaç kalmaz.

API'lerden JSON veri toplama

Birçok servis, veriyi JSON biçiminde sunan bir API sağlar. API'den veri toplamak, sayfayı çözümlemekten çok daha kararlıdır: yapı belgelenmiştir, alanlar adlandırılmıştır ve değişiklikler duyurulur. Kimlik doğrulama için genellikle bir anahtar gerekir; bu anahtarı koda gömmeyin, ortam değişkeninde tutun.

API'lerde sayfalama, istek sınırı ve hata kodları ele alınmalıdır. Sınıra yaklaşıldığında beklemek, geçici hatalarda belli sayıda yeniden denemek sağlam bir toplayıcının temel özellikleridir.

Örneğin bir ürün listesi API'si yanıtında sonraki sayfa için bir işaretçi döndürüyorsa, toplayıcı bu işaretçi bitene kadar döngüyle ilerler; her sayfada alınan kayıt sayısı kaydedilirse eksik toplama da fark edilir.

Depolama, otomasyon ve boru hattı

Toplanan veri ham hâliyle güvenle saklanır, sonra temizlenir. Küçük işler için CSV ya da JSON dosyası yeterlidir; tekrarlayan ve büyüyen veri için veritabanı daha uygundur. Aynı kaydın birden fazla kez yazılmasını önlemek için her kayda benzersiz bir anahtar verilir.

Düzenli çalışması gereken kazıyıcılar zamanlayıcıyla tetiklenir, her çalışmada kaç kayıt toplandığı ve kaç hata oluştuğu kaydedilir. Sayfa yapısı değiştiğinde kazıyıcı sessizce boş veri üretebilir; bu yüzden beklenenden az kayıt gelince uyarı veren bir kontrol eklenmelidir.

Boşluk, para birimi simgesi ve tarih biçimi gibi tutarsızlıklar toplama sırasında değil, ham veri saklandıktan sonra ayrı bir adımda düzeltilir. Böylece temizleme kuralı değiştiğinde yeniden toplamaya gerek kalmaz.

Sık yapılan hatalar ve öğrenme yolu

Sık hatalar: kırılgan seçiciler kullanmak, hata yönetimi yazmamak, bekleme koymadan yoğun istek göndermek, hukuki konuları sonraya bırakmak, ham veriyi saklamadan doğrudan temizleyip kaybetmek.

Öğrenme sırası şöyle olabilir: önce HTML yapısını ve HTTP isteklerini anlamak, sonra statik sayfa çözümleme, ardından API ve JSON, en sonda dinamik içerik ve otomasyon. Her aşamada küçük, gerçek bir hedef belirleyin; örneğin bir kitap listesini tabloya dökmek. Veri madenciliğine uzanmak isteyenler toplanan veriyi temizleme ve analiz tekniklerine geçer.

Mindset programlarında web scraping

Mindset'in Python ile Web Scraping ve Veri Toplama programı şu modülleri içerir: Web Scraping Temelleri ve Yasal Çerçeve, BeautifulSoup ile Statik Sayfa Çözümleme, Selenium ile Dinamik ve JavaScript İçerik Çekme, API Entegrasyonu ve JSON Veri Toplama, Veri Depolama, Otomasyon ve Boru Hattı, Sektörel Vaka Çalışmaları ve Son Proje. Data Scraping ve Veri Madenciliği Programı ise kazımanın yanı sıra veri temizleme ve veri madenciliği tekniklerini de kapsar.

İlgili Mindset programı

Python ile Web Scraping ve Veri Toplama

Sık sorulanlar

Sık sorulan sorular

Web scraping yasal mıdır?

Yasallık; sitenin kullanım şartlarına, toplanan verinin niteliğine (kişisel veri, telifli içerik) ve kullanım amacına bağlıdır. Genel bir evet ya da hayır yoktur. Kişisel veri içeren işlerde KVKK dikkate alınmalı, kurumsal projelerde hukuk birimine danışılmalıdır. Bu nedenle başlangıçta küçük ve kamuya açık, kullanım koşulları net verilerle denemek, hukuki riski düşük tutar.

BeautifulSoup mu Selenium mu kullanmalıyım?

İçerik ilk HTML içinde geliyorsa BeautifulSoup ile birlikte basit bir HTTP isteği yeterlidir ve çok daha hızlıdır. İçerik JavaScript ile sonradan yükleniyorsa önce arka plandaki veri isteğini bulmayı deneyin; olmazsa Selenium gibi tarayıcı otomasyonu gerekir. Ayrıca sayfa yapısı sıkça değişiyorsa, sağlam bir seçici yazmak ve hata durumunda uyarı vermek işi kolaylaştırır.

Site beni engellerse ne yapmalıyım?

Önce isteklerinizin siteyi yoracak sıklıkta olup olmadığını kontrol edin ve bekleme süresi ekleyin. Engeli aşma yollarını aramak yerine resmî API ya da veri sağlayıcıyla izinli erişimi değerlendirin. Engelleme çoğu zaman kullanım şartlarının ihlal edildiğini gösterir. Zaman zaman izinli veri paylaşımı için siteyle doğrudan iletişime geçmek de uygun bir çözümdür.

Toplanan veri nerede saklanmalı?

Küçük ve tek seferlik işler için CSV ya da JSON dosyası yeterlidir. Düzenli çalışan ve büyüyen veri setleri için veritabanı daha uygundur. Her durumda ham veriyi ayrı saklayın ve temizlenmiş sürümü ayrı üretin. Ham veri ile temizlenmiş veriyi ayrı tutmak, sonradan ihtiyaç çıkarsa işlemi baştan yapmanıza imkan verir.

Python ile Web Scraping Nasıl Yapılır