BeautifulSoup ile HTML Ayrıştırma
Ayrıştırma ağacında gezinin ve seçicilerle veri çıkarın.
BeautifulSoup ile HTML Ayrıştırma, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
BeautifulSoup'u Kurma
beautifulsoup4, HTML ve XML'i ayrıştırır. Hız için lxml ayrıştırıcısını, sıfır bağımlılıkla kullanım içinse html.parser ayrıştırıcısını kullanın.
# pip install beautifulsoup4 lxml
from bs4 import BeautifulSoup
html = "<h1>Hello</h1><p class='intro'>World</p>"
soup = BeautifulSoup(html, "lxml")
print(soup.h1.text) # HelloÖğeleri Bulma
find(tag) eşleşen ilk öğeyi döndürür. find_all(tag) eşleşen tüm öğelerin listesini döndürür.
from bs4 import BeautifulSoup
html = "<ul><li>A</li><li>B</li><li>C</li></ul>"
soup = BeautifulSoup(html, "lxml")
print(soup.find("li").text) # A
print([li.text for li in soup.find_all("li")]) # [A,B,C]CSS Seçicileri
soup.select("css selector"), CSS sözdizimini kullanır. soup.select_one() ilk eşleşmeyi döndürür.
from bs4 import BeautifulSoup
html = '<div class="card"><a href="/p/1">Link 1</a></div>'
soup = BeautifulSoup(html, "lxml")
print(soup.select("div.card a")[0]["href"]) # /p/1
print(soup.select_one("a")["href"]) # /p/1Özniteliklere Erişme
Etiket özniteliklerine sözlükte olduğu gibi erişin: tag["href"], tag.get("class", []).
from bs4 import BeautifulSoup
html = '<a href="https://example.com" class="link external">Click</a>'
soup = BeautifulSoup(html, "lxml")
a = soup.find("a")
print(a["href"]) # https://example.com
print(a.get("class", [])) # ['link', 'external']Ayrıştırma Ağacında Gezinme
Ağaçta gezinmek için .parent, .children, .next_sibling ve .previous_sibling kullanın.
from bs4 import BeautifulSoup
html = "<div><h2>Title</h2><p>Para</p></div>"
soup = BeautifulSoup(html, "lxml")
h2 = soup.find("h2")
print(h2.parent.name) # div
print(h2.next_sibling.text) # Para (next sibling)Metin Çıkarma
tag.get_text(separator=" ", strip=True), bir etiketin içindeki tüm metni döndürür ve boşlukları temizler.
from bs4 import BeautifulSoup
html = "<div> <p>Hello</p> <p> World </p> </div>"
soup = BeautifulSoup(html, "lxml")
print(soup.div.get_text(separator=" ", strip=True))
# Hello Worldrequests + BeautifulSoup ile Web Kazıma
Bir sayfayı requests ile alın ve BeautifulSoup ile ayrıştırın; bu, klasik web kazıma ikilisidir.
import requests
from bs4 import BeautifulSoup
url = "https://books.toscrape.com"
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.text, "lxml")
titles = [h3.find("a")["title"] for h3 in soup.select("article.product_pod h3")]
print(titles[:3])Göreli URL'leri Ele Alma
Göreli bağlantıları mutlak URL'lere dönüştürmek için urllib.parse.urljoin(base, href) kullanın.
from urllib.parse import urljoin
base = "https://example.com/products/"
href = "../about"
print(urljoin(base, href)) # https://example.com/aboutKodlamaları Ele Alma
BeautifulSoup kodlamayı otomatik olarak algılar; ancak kodlamayı kendiniz belirtebilir veya requests içindeki r.encoding değerini kullanabilirsiniz.
import requests
from bs4 import BeautifulSoup
r = requests.get("https://example.com")
print(r.encoding) # e.g. utf-8
soup = BeautifulSoup(r.content, "lxml", from_encoding=r.encoding)Değiştirme ve Serileştirme
Ayrıştırma ağacını değiştirin ve str(tag) veya soup.prettify() ile yeniden HTML'e dönüştürün.
from bs4 import BeautifulSoup
html = "<p>Hello <b>world</b></p>"
soup = BeautifulSoup(html, "lxml")
soup.b.decompose() # remove the <b> tag
print(str(soup.p)) # <p>Hello </p>BeautifulSoup'un Sınırları
BS4, statik HTML'i ayrıştırır. JavaScript çalıştıramaz. JavaScript ile oluşturulan sayfalar için Playwright veya Selenium kullanın.
# BeautifulSoup: good for static HTML
# Playwright: for JavaScript-rendered SPAs
# Scrapy: for large-scale crawls with pipelines
# pip install playwright
# playwright install
# from playwright.async_api import async_playwrightHızlı Kontrol
BeautifulSoup'ta bir CSS seçicisiyle eşleşen tüm öğeleri hangi yöntem döndürür?
Özet
BeautifulSoup, HTML'i üzerinde gezinilebilen bir ağaca ayrıştırır. Etiket aramak için find()/find_all(), CSS seçicileri için select() ve temiz metin için get_text() kullanın. Statik sayfalarda requests ile birlikte kullanın; JavaScript ile oluşturulan içerik için Playwright'ı tercih edin.
Sıkça Sorulan Sorular
“BeautifulSoup ile HTML Ayrıştırma” dersi ücretsiz mi?
Evet — “BeautifulSoup ile HTML Ayrıştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“BeautifulSoup ile HTML Ayrıştırma” dersinde ne öğreneceğim?
Ayrıştırma ağacında gezinin ve seçicilerle veri çıkarın. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“BeautifulSoup ile HTML Ayrıştırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- requests ve httpx ile HTTP İstekleri
- BeautifulSoup ile HTML Ayrıştırma
- Scrapy Örümceği Oluşturma
- JavaScript ve Tarama Karşıtı Önlemleri Ele Alma