0Pricing
AI Agents · Ders

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 absent

find_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çin find_all() kullanın
  • CSS seçici sorguları için select() kullanın
  • .text.strip() ile metni, .get('attr') ile öznitelikleri alın
  • .parent, .children ve 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

  1. Aracılar İçin HTTP İstemcileri: httpx ve requests
  2. BeautifulSoup ile HTML Ayrıştırma
  3. Sayfalandırma ve Dinamik İçeriği Ele Alma
  4. Ölçülü Veri Kazıma Uygulamaları
← AI Agents Sayfasına Dön