Web Sitesini Python ile Nasıl Parse Edersiniz?

Giriş: Web Parsingi Nedir?

Web parsing, bir web sayfasının içeriğini alıp analiz etme işlemi olarak tanımlanabilir. Genellikle, web scraping olarak adlandırılan bu süreç, otomatik olarak web sayfalarından veri çıkarımını içerir. Python, bu alanda popüler bir dil haline gelmiştir ve sunduğu çeşitli kütüphaneler, web sitelerinden ihtiyaç duyulan bilgiyi çekmek için kullanışlı araçlar sağlamaktadır. Veri mühendisliği, veri bilimi veya uygulama geliştirme gibi birçok alanda kullanılan bu teknik, zaman tasarrufu sağlarken aynı zamanda manuel veri toplama hatalarını azaltmaktadır.

Web parsing, dijital içerik üzerinde çalışmanızı kolaylaştırır. Siz de veri analizi, pazar araştırması veya herhangi bir queo farklılık yaratmak için web sitelerinden belirli verileri çekmek istiyorsanız, Python ile bunu rahatlıkla yapabilirsiniz. Bu yazıda, web parsing işlemini gerçekleştirmek için kullanabileceğiniz adım adım bir rehber sunacağız.

Web sitelerini parse etmek, HTML ve CSS gibi dillerde temel bilgiye ihtiyaç duymanızı gerektirse de, Python’un sunduğu kütüphaneler sayesinde bu süreç oldukça basit hale geliyor. Şimdi gelin, Python ile bir web sitesini nasıl parse edeceğimizi ve hangi adımları izleyeceğimizi öğrenelim.

Python Kütüphaneleri: Beautiful Soup ve Requests

Web parsing işlemini gerçekleştirmek için en yaygın kullanılan Python kütüphaneleri Beautiful Soup ve Requests’tir. Requests, HTTP istekleri yapmak için kullanılırken, Beautiful Soup ise HTML ve XML dosyalarını parse etmek için ideal bir araçtır. Bu ikili, birlikte çalışarak web sayfalarından veri çekmeyi kolaylaştırır.

Öncelikle, bu kütüphaneleri yüklememiz gerekecek. Bunu yapabilmek için terminal ya da komut istemcisine şu komutları yazabilirsiniz:

pip install requests
pip install beautifulsoup4

İlk olarak Requests kütüphanesini kullanarak web sayfasından veri yükleyeceğiz. Ardından, Beautiful Soup yardımıyla bu veriyi parse edeceğiz. İşte temel bir örnek:

import requests
from bs4 import BeautifulSoup

url = 'https://example.com'
response = requests.get(url)

soup = BeautifulSoup(response.content, 'html.parser')

Web Sayfasını Çekmek

Şimdi, web sayfasından verileri çekmek için yukarıdaki kodu kullandık. “response” değişkeni, istek yaptığımız sayfanın içeriğini barındırıyor. Beautiful Soup ile bu içerik üzerinde çalışarak, ihtiyacımıza uygun verilere ulaşmalıyız. Örneğin, bir makaledeki başlıkları veya paragrafları çekmek isteyebiliriz.

Verileri çekmek için önce çektiğimiz HTML yapısını incelemekte fayda var. Tarayıcıda sayfayı açıp sağ tıklayarak ‘İncele’ opsiyonuna tıklayarak HTML yapısını görüntüleyebilirsiniz. Bu yapıyı inceledikten sonra, çekmek istediğimiz öğelerin sınıflarını veya etiketlerini belirlemiş olacağız.

Örneğin, bir makalenin başlığı <h1> etiketi ile işaretlenmişse, şu şekilde çekebilirsiniz:

title = soup.find('h1').text

Bu kod, sayfanın ilk <h1> etiketindeki metni alır.

Veri Çekme: CSS Seçicileri ve XPath

Beautiful Soup ile veri çekerken CSS seçicilerini veya XPath ifadelerini kullanmak, belirli öğeleri daha kolay hale getirir. CSS seçicileri, tarayıcıların üzerinde çalıştığı sayfa elemanlarına kolayca erişim sağlar. Örneğin, belirli bir div veya sınıf adını kullanarak öğeleri çekebiliriz.

Aşağıdaki örnekte, belirli bir sınıfa sahip tüm paragrafları çekiyoruz:

paragraphs = soup.select('.classname')

Yukarıdaki kod, sayfadaki ‘classname’ sınıfına sahip tüm elemanları içeren bir liste oluşturur. Her bir paragrafa erişim sağlamak için bu liste üzerinde döngü kullanabiliriz:

for paragraph in paragraphs:
    print(paragraph.text)

XPath ise XML verilerini (ve HTML’yi) sorgulamak için kullanılan çok güçlü bir dil. Eğer Beautiful Soup yerine lxml kütüphanesini kullanırsanız, XPath ifadeleriyle daha karmaşık sorgular oluşturabilirsiniz.

Veriyi Temizleme ve İşleme

Web scraping sonrası çektiğiniz verileri genellikle temizlemek ve işlemeniz gerekecek. Bu süreç, ihtiyaç duyduğunuz veri formatına ve içeriğine bağlıdır. Ancak bazı genel adımları takip etmek faydalı olabilir.

Örneğin, metin içindeki gereksiz boşlukları temizlemek için strip() metodunu kullanabiliriz:

cleaned_text = paragraph.text.strip()

Ayrıca, çektiğiniz verilerin geçerli bir formatta olduğuna emin olmak için belirli Regex desenleri ile metin üzerinde kontroller yapabilirsiniz. Regex, metin işleme konularında oldukça güçlü bir araçtır ve birçok farklı formatı kontrol etmek için kullanılabilir.

Veriyi Kaydetme

Bütün bu süreçlerden sonra, çektiğiniz verileri bir dosyaya yazmak isteyebilirsiniz. Python, veri kaydetmek için pek çok yol sunar. En basit yöntemlerden biri, verileri bir .csv dosyasına yazmaktır. Bunun için csv kütüphanesini kullanabiliriz:

import csv

with open('data.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['Başlık', 'İçerik'])  # Header
    writer.writerow([title, cleaned_text])  # Data

Bu şekilde, web’den çektiğiniz verileri düzenli bir formatta kaydedebilirsiniz. Böylece daha sonra bu verileri analiz etmek veya başka bir uygulama için kullanmak da mümkün olacaktır.

Hata Yönetimi

Web scraping sürecinde karşılaşabileceğiniz bazı hataların üstesinden gelmek için istisna yönetimini kullanmalısınız. Örneğin, yanlış bir URL belirtildiğinde ya da web sayfasının yapısı değiştiğinde programınız hata verebilir. Bu tür durumları önlemek için try-except blokları kullanarak hataları yakalayabilir ve uygun bir yanıt verebilirsiniz.

try:
response = requests.get(url)
response.raise_for_status() # 4XX-5XX hatalarını tetikler
except requests.exceptions.RequestException as e:
print(f

Scroll to Top