1. HTTP Hataları: 404, 503 ve 403
Birçok web scraping projesi, hedef web sayfasının doğru şekilde yüklenmemesiyle ilgili sorunlarla karşılaşabilir. Bu genellikle HTTP hataları ile kendini gösterir. En yaygın karşılaşılan HTTP hataları arasında 404 (Sayfa Bulunamadı), 503 (Servis Kullanılamıyor) ve 403 (Erişim Yasağı) bulunur.
Çözüm:
- 404 hatası alıyorsanız, URL’nin doğru olduğundan emin olun. Sayfanın taşındığı veya silindiği durumlar olabilir.
- 503 hatası, genellikle hedef sunucunun yoğunluktan dolayı istekleri reddetmesi anlamına gelir. Bunu çözmek için bekleme sürelerini artırabilir veya proxy kullanabilirsiniz.
- 403 hatası, web sitesinin erişim engeli koyduğunu gösterir. Bunun için kullanıcı ajanı (user-agent) değiştirme veya başlık bilgilerini özelleştirme yöntemlerini deneyebilirsiniz.
import requests
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://example.com', headers=headers)
print(response.status_code)
2. Veri Çekme Hataları: Doğru Elemanları Seçememek
Bir diğer yaygın sorun, verilerin doğru şekilde çekilememesidir. Çoğu zaman, web sayfasındaki HTML elemanlarını doğru şekilde seçemeyiz. Yanlış bir CSS selector veya XPath kullanmak, verilerin eksik veya yanlış bir şekilde toplanmasına yol açabilir.
Çözüm:
Veri çekme sırasında doğru elemanları seçmek için, sayfanın HTML yapısını dikkatlice incelemeniz gerekmektedir. Eğer elemanlar dinamikse, yani JavaScript ile yükleniyorsa, Selenium gibi araçlar kullanarak sayfayı etkileşimli bir şekilde yüklemeyi deneyebilirsiniz.
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://example.com')
element = browser.find_element(By.XPATH, '//*[@id="content"]/p')
print(element.text)
3. Sayfa Değişiklikleri ve Yapılandırma Sorunları
Web sayfası zaman içinde değişebilir, bu da scraping kodunuzun artık çalışmaması anlamına gelir. Web siteleri düzenli olarak yapılarını değiştirebilir, bu da kullandığınız CSS selector’larının veya XPath’lerin geçersiz olmasına yol açar.
Çözüm:
Sayfa değişiklikleri olduğunda, scraping kodunuzu gözden geçirmeniz gerekecektir. Ayrıca, dinamik içerik çekerken, sayfanın yüklenmesi ve JavaScript kodlarının tamamlanması için yeterli süre beklediğinizden emin olun. Selenium ile sayfanın tamamen yüklenmesini bekleyebilirsiniz.
4. Çok Fazla İstek Göndermek: IP Engellemeleri
Web scraping yaparken, çok fazla istek göndermek bazen IP'nizin engellenmesine yol açabilir. Web siteleri, aşırı yüklenmeyi önlemek için otomatik sistemler kurabilir ve bu da IP’nizin engellenmesine neden olabilir.
Çözüm:
Bunun önüne geçmek için proxy kullanabilirsiniz. Ayrıca, istekler arasında bekleme süreleri koyarak, sayfaları hızlı bir şekilde taramaktan kaçının. İsteklerinizi daha insana yakın bir hızda yapmanız, engellenme riskinizi azaltacaktır.
import time
for i in range(5):
response = requests.get('https://example.com')
print(response.status_code)
time.sleep(2) # 2 saniye bekleme
5. Veriyi Kaydetme Sorunları
Veri kazıma işleminin sonunda, çekilen veriyi bir dosyaya kaydetme aşamasında bazı sorunlarla karşılaşılabilir. Özellikle CSV veya JSON formatlarına veri kaydederken, doğru biçimde kaydetmek ve veriyi düzenli tutmak önemlidir.
Çözüm:
Veri kaydederken, dosya formatlarının uyumlu olduğundan emin olun. Pandas gibi kütüphanelerle verilerinizi daha düzenli bir şekilde kaydedebilir, CSV ve JSON gibi yaygın formatlara verileri sorunsuz bir şekilde yazabilirsiniz.
import pandas as pd
data = {'title': ['Python', 'Web Scraping'], 'url': ['https://example.com', 'https://example2.com']}
df = pd.DataFrame(data)
df.to_csv('data.csv', index=False)
Sonuç
Python ile web scraping yaparken karşılaşılan bu yaygın hatalar, her geliştiricinin zaman zaman yaşadığı zorluklardır. Ancak, doğru araçlar ve yöntemlerle bu hataların üstesinden gelebilirsiniz. Unutmayın, sabır ve dikkatle kodunuzu yazmak, başarılı bir veri kazıma işleminin anahtarıdır.
Her hata bir öğrenme fırsatıdır. Bu yazıda paylaştığımız çözümleri dikkate alarak, web scraping projelerinizi daha verimli ve sorunsuz hale getirebilirsiniz.