AI Agents · Lektion

HTML mit BeautifulSoup parsen

find(), select(), CSS-Selektoren und strukturierte Inhalte aus HTML extrahieren.

Lektion 2 von 413 Schritte

HTML mit BeautifulSoup parsen ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Warum HTML in Agents parsen?

Viele Datenquellen sind keine APIs, sondern Webseiten. Wenn ein Agent strukturierte Informationen aus HTML extrahieren muss, muss er das rohe Markup in einen navigierbaren Baum umwandeln.

BeautifulSoup (bs4) ist dafür die Standardbibliothek in Python. Sie wandelt fehlerhaftes HTML in ein Python-Objekt um, das Sie problemlos abfragen können.

Ein BeautifulSoup-Objekt erstellen

Übergeben Sie rohes HTML und den Namen eines Parsers an BeautifulSoup(). 'html.parser' ist in Python integriert und erfordert keine zusätzliche Installation. Für schnelleres Parsen großer Seiten ist 'lxml' über pip verfügbar.

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() — Ein einzelnes Element finden

soup.find(tag, attrs) gibt das erste passende Element zurück oder None, wenn kein Element gefunden wurde. Sie können nach Tag-Namen, Klasse, ID oder einem beliebigen Attribut suchen.

Prüfen Sie immer auf None, bevor Sie Methoden für das Ergebnis aufrufen.

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() — Mehrere Elemente finden

soup.find_all(tag) gibt eine Liste aller passenden Elemente zurück. Durchlaufen Sie diese Liste, um Daten aus wiederkehrenden Strukturen wie Listeneinträgen, Tabellenzeilen oder Artikelkarten zu extrahieren.

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)

CSS-Selektoren mit select()

soup.select('css selector') ermöglicht die Verwendung der vertrauten CSS-Syntax. Dies ist häufig kürzer als verkettete find()-Aufrufe, insbesondere bei verschachtelten Elementen.

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 mit .text und .strip() extrahieren

.text (oder .get_text()) gibt den gesamten Textinhalt innerhalb eines Elements zurück, einschließlich verschachtelter Tags. Verwenden Sie .strip(), um führende und nachgestellte Leerzeichen zu entfernen, die in HTML häufig vorkommen.

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'

Attribute mit .get() extrahieren

Auf Tag-Attribute wie href, src und data-* greifen Sie wie auf Dictionary-Einträge mit .get('attr_name') zu. Fehlt das Attribut, wird sicher None zurückgegeben.

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'

Im Parse-Baum navigieren

BeautifulSoup-Elemente haben Beziehungen zu übergeordneten, untergeordneten und benachbarten Elementen, durch die Sie navigieren können. Verwenden Sie .parent, .children, .next_sibling und .previous_sibling, um sich von einem gefundenen Element aus im Baum zu bewegen.

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.'

Alle Links einer Seite extrahieren

Eine häufige Aufgabe für Agents besteht darin, alle Links einer Seite für das weitere Crawling zu sammeln. Suchen Sie alle <a>-Tags und extrahieren Sie deren href-Attribute. Filtern Sie dabei leere Attribute heraus.

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])

Fehlerhaftes HTML robust verarbeiten

HTML aus der Praxis ist häufig fehlerhaft: Tags werden nicht geschlossen, Elemente passen nicht zusammen oder es gibt Probleme mit der Zeichenkodierung. Der Parser von BeautifulSoup ist fehlertolerant und versucht, Fehler automatisch zu korrigieren. Sichern Sie sich dennoch immer gegen None ab, wenn Sie auf verschachtelte Elemente zugreifen.

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'

Vollständiges Scraper-Tool für Agents

Führen wir alles zusammen: eine vollständige Scraper-Funktion, die ein Agent als Tool aufrufen kann. Sie ruft eine Seite ab, parst sie und gibt strukturierte Daten in einem Format zurück, das der Agent verarbeiten kann.

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]
    }

Wissenscheck: BeautifulSoup

Testen Sie Ihr Verständnis des HTML-Parsings mit BeautifulSoup.

Zusammenfassung: HTML mit BeautifulSoup parsen

Sie können jetzt strukturierte Daten aus HTML-Seiten innerhalb Ihrer Agenten extrahieren:

  • Erstellen Sie mit BeautifulSoup(html, 'html.parser') ein Soup-Objekt
  • Verwenden Sie find() für ein einzelnes Element und find_all() für mehrere Elemente
  • Verwenden Sie select() für Abfragen mit CSS-Selektoren
  • Lesen Sie Text mit .text.strip() und Attribute mit .get('attr') aus
  • Navigieren Sie mit .parent, .children und Geschwisterelementen durch den Baum

In Kombination mit einem HTTP-Client ermöglicht BeautifulSoup Ihrem Agenten, beliebige Webseiten zu lesen.

Kostenlos starten

Lerne AI Agents mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
60
Lektionen
239

Häufig gestellte Fragen

Ist die Lektion „HTML mit BeautifulSoup parsen“ kostenlos?

Ja — der vollständige Text von „HTML mit BeautifulSoup parsen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „HTML mit BeautifulSoup parsen“?

find(), select(), CSS-Selektoren und strukturierte Inhalte aus HTML extrahieren. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „HTML mit BeautifulSoup parsen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. HTTP-Clients für Agenten: httpx und requests
  2. HTML mit BeautifulSoup parsen
  3. Paginierung und dynamische Inhalte verarbeiten
  4. Rücksichtsvolle Scraping-Praktiken
← Zurück zu AI Agents