HTML mit BeautifulSoup parsen
find(), select(), CSS-Selektoren und strukturierte Inhalte aus HTML extrahieren.
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 absentfind_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, BobText 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 undfind_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,.childrenund Geschwisterelementen durch den Baum
In Kombination mit einem HTTP-Client ermöglicht BeautifulSoup Ihrem Agenten, beliebige Webseiten zu lesen.
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
- HTTP-Clients für Agenten: httpx und requests
- HTML mit BeautifulSoup parsen
- Paginierung und dynamische Inhalte verarbeiten
- Rücksichtsvolle Scraping-Praktiken