BeautifulSoup ile HTML Ayrıştırma
find(), select(), CSS seçicileri ve HTML'den yapılandırılmış içerik çıkarma.
BeautifulSoup ile HTML Ayrıştırma, CoddyKit'te ücretsiz bir AI Agents 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, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.
Aracılarda HTML Neden Ayrıştırılır
Birçok veri kaynağı API değildir; bunlar web sayfalarıdır. Bir aracının HTML'den yapılandırılmış bilgiler çıkarması gerektiğinde ham biçimlendirmeyi gezinilebilir bir ağaçta ayrıştırmalıdır.
BeautifulSoup (bs4), bunun için standart Python kitaplığıdır. Dağınık HTML'i kolayca sorgulayabileceğiniz bir Python nesnesine dönüştürür.
BeautifulSoup Nesnesi Oluşturma
Ham HTML'i ve bir ayrıştırıcı adını BeautifulSoup() işlevine geçirin. 'html.parser', Python ile birlikte gelir ve ek kurulum gerektirmez. Büyük sayfaları daha hızlı ayrıştırmak için 'lxml' pip aracılığıyla kullanılabilir.
from bs4 import BeautifulSoup
import httpx
# Fetch HTML
response = httpx.get('https://example.com', timeout=10.0)
html = response.text
# Parse it
soup = BeautifulSoup(html, 'html.parser')
# Get the page title
print(soup.title.text) # 'Example Domain'find() — Tek Bir Öğe Bulma
soup.find(tag, attrs), eşleşen ilk öğeyi döndürür; eşleşme bulunamazsa None döndürür. Etiket adına, sınıfa, kimliğe veya herhangi bir özniteliğe göre eşleştirme yapabilirsiniz.
Sonuç üzerinde yöntemleri çağırmadan önce her zaman None kontrolü yapın.
from bs4 import BeautifulSoup
html = '<div class="content"><h1>Title</h1><p>Body text here.</p></div>'
soup = BeautifulSoup(html, 'html.parser')
# Find by tag + class
content_div = soup.find('div', class_='content')
if content_div:
heading = content_div.find('h1')
print(heading.text) # 'Title'
# Find by id
sidebar = soup.find('div', id='sidebar') # None if absentfind_all() — Birden Çok Öğe Bulma
soup.find_all(tag), eşleşen tüm öğelerin listesini döndürür. Liste öğeleri, tablo satırları veya makale kartları gibi yinelenen yapılardan veri çıkarmak için bu liste üzerinde yineleme yapın.
from bs4 import BeautifulSoup
html = '<ul><li>Apple</li><li>Banana</li><li>Cherry</li></ul>'
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('li')
for item in items:
print(item.text) # Apple, Banana, Cherry
# Limit results
first_two = soup.find_all('li', limit=2)select() ile CSS Seçicileri
soup.select('css selector'), alışık olduğunuz CSS söz dizimini kullanmanızı sağlar. Özellikle iç içe öğeler için, zincirlenmiş find() çağrılarından çoğu zaman daha özlüdür.
from bs4 import BeautifulSoup
html = '''
<table>
<tr><td class="name">Alice</td><td class="score">95</td></tr>
<tr><td class="name">Bob</td><td class="score">87</td></tr>
</table>
'''
soup = BeautifulSoup(html, 'html.parser')
# Select all td elements inside tr inside table
cells = soup.select('table tr td')
for cell in cells:
print(cell.text)
# Select only name cells
names = soup.select('td.name')
for n in names:
print(n.text) # Alice, Bob.text ve .strip() ile Metin Çıkarma
.text (veya .get_text()), iç içe etiketler de dahil olmak üzere bir öğenin içindeki tüm metin içeriğini döndürür. HTML'in çoğu zaman içerdiği baştaki ve sondaki boşlukları kaldırmak için .strip() kullanın.
from bs4 import BeautifulSoup
html = '<p> \n Price: <strong>$29.99</strong> \n </p>'
soup = BeautifulSoup(html, 'html.parser')
paragraph = soup.find('p')
# .text includes nested tag content
print(paragraph.text) # ' \n Price: $29.99 \n '
print(paragraph.text.strip()) # 'Price: $29.99'
# get_text with separator
print(paragraph.get_text(separator=' ', strip=True)) # 'Price: $29.99'.get() ile Öznitelik Çıkarma
href, src ve data-* gibi etiket özniteliklerine, .get('attr_name') kullanılarak sözlükteki gibi erişilir. Öznitelik eksikse bu yöntem güvenli biçimde None döndürür.
from bs4 import BeautifulSoup
html = '''
<a href="https://example.com/page" data-id="42">Click here</a>
<img src="/images/logo.png" alt="Logo">
'''
soup = BeautifulSoup(html, 'html.parser')
link = soup.find('a')
print(link.get('href')) # 'https://example.com/page'
print(link.get('data-id')) # '42'
print(link.get('class')) # None (no class attribute)
img = soup.find('img')
print(img.get('src')) # '/images/logo.png'Ayrıştırma Ağacında Gezinme
BeautifulSoup öğeleri, geçiş yapabileceğiniz üst/alt/kardeş ilişkilerine sahiptir. Bulunan bir öğenin çevresinde gezinmek için .parent, .children, .next_sibling ve .previous_sibling kullanın.
from bs4 import BeautifulSoup
html = '''
<div class="article">
<h2>Headline</h2>
<p>First paragraph.</p>
<p>Second paragraph.</p>
</div>
'''
soup = BeautifulSoup(html, 'html.parser')
h2 = soup.find('h2')
print(h2.text) # 'Headline'
print(h2.parent['class']) # ['article']
print(h2.next_sibling.next_sibling.text) # 'First paragraph.'Bir Sayfadaki Tüm Bağlantıları Çıkarma
Yaygın bir aracı görevi, daha sonra taramak üzere bir sayfadaki tüm bağlantıları toplamaktır. Tüm <a> etiketlerini bulun ve boş olanları filtreleyerek href özniteliklerini çıkarın.
from bs4 import BeautifulSoup
import httpx
def extract_links(url: str) -> list:
response = httpx.get(url, timeout=10.0)
soup = BeautifulSoup(response.text, 'html.parser')
links = []
for tag in soup.find_all('a'):
href = tag.get('href')
if href and href.startswith('http'):
links.append(href)
return links
# urls = extract_links('https://news.ycombinator.com')
# print(urls[:5])Hatalı HTML'i Sorunsuz Biçimde Ele Alma
Gerçek dünyadaki HTML çoğu zaman bozuktur: kapatılmamış etiketler, eşleşmeyen öğeler ve kodlama sorunları içerir. BeautifulSoup ayrıştırıcısı hatalara toleranslıdır ve hataları otomatik olarak düzeltmeye çalışır. Ancak iç içe öğelere erişirken her zaman None durumunu kontrol edin.
from bs4 import BeautifulSoup
# Broken HTML — missing closing tags
html = '<div><p>Hello <strong>World</div>'
soup = BeautifulSoup(html, 'html.parser')
# BS4 repairs the tree automatically
print(soup.prettify())
# <div><p>Hello <strong>World</strong></p></div>
# Safe chained access
price = soup.find('span', class_='price')
price_text = price.text.strip() if price else 'N/A'
print(price_text) # 'N/A'Eksiksiz Aracı Tarama Aracı
Hepsini bir araya getirelim: bir aracının araç olarak çağırabileceği eksiksiz bir tarama işlevi. Bir sayfayı alır, ayrıştırır ve aracının üzerinde akıl yürütebileceği bir biçimde yapılandırılmış veri döndürür.
from bs4 import BeautifulSoup
import httpx
def scrape_article(url: str) -> dict:
response = httpx.get(url, headers={'User-Agent': 'MyAgent/1.0'}, timeout=10.0)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('h1')
paragraphs = soup.find_all('p')
return {
'url': url,
'title': title.text.strip() if title else '',
'text': ' '.join(p.text.strip() for p in paragraphs[:5]),
'links': [a.get('href') for a in soup.find_all('a', href=True)][:10]
}Bilgi Kontrolü: BeautifulSoup
BeautifulSoup ile HTML ayrıştırma konusundaki anlayışınızı sınayın.
Özet: BeautifulSoup ile HTML Ayrıştırma
Artık ajanlarınızın içinde HTML sayfalarından yapılandırılmış veriler çıkarabilirsiniz:
BeautifulSoup(html, 'html.parser')ile bir ayrıştırma nesnesi oluşturun- Tek bir öğe için
find(), birden fazla öğe içinfind_all()kullanın - CSS seçici sorguları için
select()kullanın .text.strip()ile metni,.get('attr')ile öznitelikleri alın.parent,.childrenve kardeş öğelerle ağaçta gezinin
BeautifulSoup, bir HTTP istemcisiyle birlikte kullanıldığında ajanın herhangi bir web sayfasını okuyabilmesini sağlar.
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 AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.
“BeautifulSoup ile HTML Ayrıştırma” dersinde ne öğreneceğim?
find(), select(), CSS seçicileri ve HTML'den yapılandırılmış içerik çıkarma. AI Agents 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.
AI Agents öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Agents, 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 AI Agents dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Agents 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
- Aracılar İçin HTTP İstemcileri: httpx ve requests
- BeautifulSoup ile HTML Ayrıştırma
- Sayfalandırma ve Dinamik İçeriği Ele Alma
- Ölçülü Veri Kazıma Uygulamaları