Web Scraping Nedir?
Web scraping, internet üzerindeki web sayfalarından otomatik olarak veri çekme işlemine verilen isimdir. Bu teknik, veri analizi, fiyat takibi, içerik toplama gibi birçok alanda kullanılabilir.
Python’da Web Scraping İçin Temel Kütüphaneler
BeautifulSoup
HTML ve XML parse etmek için kullanılan popüler bir kütüphanedir. Kolay API’si sayesinde öğeleri seçmek ve metinleri çıkarmak basittir.
Selenium
JavaScript ile dinamik olarak oluşturulan sayfalara erişmek için tarayıcı otomasyonu sağlar. Gerçek bir tarayıcı çalıştırdığı için sayfanın tam render edilmesini bekleyebilirsiniz.
Requests
HTTP istekleri göndermek ve yanıtları almak için temel kütüphanedir. Genellikle BeautifulSoup ile birlikte kullanılır.
Kurulum ve İlk Örnek
Öncelikle gerekli paketleri pip ile yükleyelim:
pip install requests beautifulsoup4 seleniumBasit bir örnekle bir web sayfasının başlık etiketini çekelim:
import requests
from bs4 import BeautifulSoup
url='https://example.com'
response=requests.get(url)
soup=BeautifulSoup(response.text,'html.parser')
title=soup.find('title').get_text()
print('Sayfa başlığı:',title)Dinamik Sayfalarda Selenium Kullanımı
Selenium ile ChromeDriver’ı başlatarak bir sayfayı açıp içerik alabiliriz:
from selenium import webdriver
from selenium.webdriver.common.by import By
options=webdriver.ChromeOptions()
options.add_argument('--headless')
driver=webdriver.Chrome(options=options)
driver.get('https://quotes.toscrape.com/js/')
# Sayfanın tamamen yüklenmesini bekleyelim
driver.implicitly_wait(5)
quotes=driver.find_elements(By.CLASS_NAME,'quote')
for q in quotes:
text=q.find_element(By.CLASS_NAME,'text').text
author=q.find_element(By.CLASS_NAME,'author').text
print(f'{text} - {author}')
driver.quit()Veriyi Temizleme ve Saklama
Çektiğiniz veriyi pandas ile DataFrame’e dönüştürüp CSV olarak kaydedebilirsiniz:
import pandas as pd
data={'quote':[...],'author':[...]}
df=pd.DataFrame(data)
df.to_csv('quotes.csv',index=False)İpuçları ve En İyi Uygulamalar
- Web sitesinin robots.txt dosyasını kontrol edin ve izin verilen kurallara uyun.
- İsteklerinizde bir User-Agent başlığı ekleyerek tarayıcı kimliğini taklit edin.
- İstekler arasında rastgele bekleme süreleri koyarak sunucuya aşırı yük bindirmeyin.
- Hata yönetimi için try/except blokları kullanın ve HTTP durum kodlarını kontrol edin.
Etik ve Yasal Konular
Web scraping yaparken sitenin hizmet şartlarını ve yerel yasaları göz önünde bulundurmak gerekir. Özellikle kişisel veri toplama durumunda KVKK ve GDPR gibi düzenlemelere uyum sağlamak zorunludur.
Eğer bir site veri çekmeye izin vermiyorsa, alternatif olarak resmi API’leri tercih etmek hem yasal hem de teknik açıdan daha güvenlidir.
Performans Optimizasyonu
Büyük ölçekli projelerde hız ve kaynak tüketimini azaltmak için aşağıdaki yöntemleri uygulayabilirsiniz:
- İstekleri asenkron hale getirerek aynı anda birden fazla sayfayı çekmek (aiohttp, asyncio).
- İçerik önbellekleme (Redis, memcached) kullanarak aynı sayfayı tekrar indirmemek.
- İhtiyacınız olmayan CSS, JS ve resimleri filtreleyerek yalnızca metin içeriğine odaklanmak.
Sık Karşılaşılan Sorunlar
- Captcha ve Bot Koruması: Çözüm: captcha hizmetleri veya manuel müdahale.
- IP Engellemesi: Çözüm: proxy rotasyonu kullanın.
- Değişen HTML Yapısı: Çözüm: XPath veya CSS seçicileri dinamik olarak güncelleyin.
Sonuç
Python, güçlü kütüphaneleri ve geniş topluluğu sayesinde web scraping projelerini hızlı ve güvenilir bir şekilde hayata geçirmenizi sağlar. Bu rehberdeki adımları uygulayarak kendi veri toplama scriptlerinizi oluşturabilir, gerçek dünya problemlerine çözüm üretebilirsiniz.