1. "HTTPError" ile Karşılaşmak
İlk olarak, "HTTPError" hatasıyla karşılaşırsanız, bu genellikle bağlantı kurmaya çalıştığınız web sayfasının ulaşılabilir olmadığını veya sayfanın korunduğunu gösterir. Özellikle kullanıcı doğrulaması veya kimlik doğrulaması gerektiren sitelerde bu hata sıkça karşınıza çıkabilir. Bunun için, HTTP başlıklarını doğru yapılandırarak çözüm bulabilirsiniz. Aşağıdaki gibi bir kod kullanarak User-Agent bilgisi ekleyebilirsiniz:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
response = requests.get('https://example.com', headers=headers)
Bu basit çözüm, çoğu zaman siteye erişim sağlar.
2. "AttributeError" ile Web Scraping Yaparken Element Bulamama
Web scraping yaparken en sık karşılaşılan hatalardan bir diğeri, "AttributeError" hatasıdır. Bu hata genellikle BeautifulSoup ile bir elementi bulmaya çalışırken, o elementin sayfada olmadığı durumlarda meydana gelir. Bu durumda, elemanın var olup olmadığını kontrol etmek önemlidir. Bunu şu şekilde çözebilirsiniz:
from bs4 import BeautifulSoup
import requests
response = requests.get('https://example.com')
soup = BeautifulSoup(response.text, 'html.parser')
element = soup.find('div', {'class': 'target-class'})
if element:
print(element.text)
else:
print("Element bulunamadı!")
3. "TimeoutError" ile Bağlantı Sorunları
Web scraping yaparken bazen bağlantılar zaman aşımına uğrar ve "TimeoutError" hatası alabilirsiniz. Bu, hedef siteye bağlanırken çok uzun süre yanıt alamadığınız anlamına gelir. Bunun için, requests kütüphanesinin `timeout` parametresini kullanarak, bağlantı süresini sınırlayabilirsiniz:
response = requests.get('https://example.com', timeout=5)
Bu şekilde, 5 saniye içinde bir yanıt alamazsanız, işlem otomatik olarak sonlanır.
4. "Selenium" Kullanırken "StaleElementReferenceException" Hatası
Selenium kullanarak dinamik web sayfalarından veri çekmeye çalıştığınızda, zaman zaman "StaleElementReferenceException" hatası alabilirsiniz. Bu, sayfa yenilendiğinde veya elementin sayfada tekrar yer değiştirdiğinde meydana gelir. Bu sorunu çözmek için, doğru elementin sayfada tekrar yüklendiğinden emin olmalısınız. Bekleme (wait) kullanmak bu hatayı önlemenize yardımcı olur.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://example.com')
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'target-element')))
print(element.text)
Bu kod, sayfa tamamen yüklendikten sonra elementin varlığını kontrol eder ve doğru veriyi çekmenizi sağlar.
5. "Data Duplication" Yani Aynı Verinin Birden Fazla Kez Çekilmesi
Web scraping yaparken bazen aynı veriyi birden fazla kez çekebilirsiniz. Bu durum genellikle döngüsel veri çekme işleminde meydana gelir. Bu sorunu önlemek için, verilerinizi eşsiz bir şekilde sakladığınızdan emin olmanız gerekir. Özellikle veritabanı kullanıyorsanız, her kaydı kontrol ederek yalnızca benzersiz verileri eklemelisiniz. İşte basit bir örnek:
seen_data = set()
for item in scraped_data:
if item not in seen_data:
seen_data.add(item)
# Veriyi veritabanına ekleyin
Bu şekilde, her veriyi yalnızca bir kez kaydederek veri çoğalmasını önlersiniz.
Sonuç
Web scraping yaparken karşılaşılan bu yaygın hatalar, sürecin bir parçası olsa da, doğru çözüm yöntemleriyle üstesinden gelinebilir. Python'un güçlü kütüphaneleri sayesinde, web verilerini kolayca çekebilir ve analiz edebilirsiniz. Bu yazıda ele aldığımız 5 yaygın hatayı ve çözüm önerilerini dikkate alarak, daha verimli ve sorunsuz bir scraping deneyimi elde edebilirsiniz.