find() und find_all() in BeautifulSoup: Leitfaden 2026

Lernen Sie, wie Sie mit den Methoden find() und find_all() von BeautifulSoup Webdaten in Python effizient nach Klasse, ID, Text und Attributen durchsuchen können.
12 min lesen
How To Use BeautifulSoup’s find and find_all blog image

find() und find_all() sind wichtige Methoden für das Web-Scraping mit BeautifulSoup, mit denen Sie Daten aus HTML extrahieren können. Die Methode find() ruft das erste Element ab, das Ihren Kriterien entspricht, z. B. find("div"), um das erste div auf einer Seite zu erhalten, und gibt None zurück, wenn keine Übereinstimmung gefunden wird. find_all() hingegen findet alle übereinstimmenden Elemente und gibt sie als Liste zurück, was sich perfekt für die Extraktion mehrerer Elemente wie aller div-Tags eignet. Bevor Sie mit BeautifulSoup mit dem Web-Scraping beginnen, stellen Sie sicher, dass Sie sowohl Requests als auch BeautifulSoup installiert haben.

Installieren Sie Abhängigkeiten

pip install requests
pip install beautifulsoup4

find()

Machen wir uns mit find() vertraut. In den folgenden Beispielen verwenden wir Quotes To Scrape und die Fake Store API, um Elemente auf der Seite zu finden. Beide Websites wurden für das Scraping entwickelt. Sie ändern sich nicht viel und eignen sich daher perfekt zum Lernen.

Suche nach Klasse

Um ein Element anhand seiner Klasse zu finden, verwenden wir das Schlüsselwort class_. Sie fragen sich vielleicht, warum class_ und nicht class? In Python ist class ein Schlüsselwort, das zum Erstellen benutzerdefinierter Datentypen verwendet wird. Der Unterstrich in class_ verhindert, dass dieses Schlüsselwort Konflikte mit unserem Code verursacht.

Das folgende Beispiel findet das erste div mit der Klasse: quote.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_quote = soup.find("div", class_="quote")
print(first_quote.text)

Hier ist unsere Ausgabe.

„Die Welt, wie wir sie geschaffen haben, ist ein Produkt unseres Denkens. Sie kann nicht verändert werden, ohne unser Denken zu verändern.“
von Albert Einstein
(über)


Tags:

Veränderung
Tiefe Gedanken
Denken
Welt

Suche nach ID

Beim Scraping müssen Sie häufig auch nach Elementen anhand ihrer ID suchen. Im folgenden Beispiel verwenden wir das ID-Argument, um das Menü auf der Seite zu finden. Hier finden wir das Menü auf der Seite anhand seiner ID.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://fakestoreapi.com")

soup = BeautifulSoup(response.text, "html.parser")

ul = soup.find("ul", id="menu")

print(ul.text)

Hier ist das Menü, nachdem wir es extrahiert und auf dem Terminal ausgegeben haben.

Home
Dokumente
GitHub
Kaufen Sie mir einen Kaffee

Suche nach Text

Wir können auch anhand des Textes nach Elementen suchen. Dazu verwenden wir das String-Argument. Das folgende Beispiel findet die Schaltfläche „Anmelden” auf der Seite.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

login_button = soup.find("a", string="Login")
print(login_button.text)

Wie Sie sehen können, wird „Login“ auf der Konsole ausgegeben.

Login

Suche nach Attribut

Wir können auch verschiedene Attribute für eine präzisere Suche verwenden. Dieses Mal suchen wir erneut das erste Zitat auf der Seite. Allerdings suchen wir nach einem Span mit dem Itemprop „text”. Damit finden wir erneut unser erstes Zitat, jedoch ohne alle zusätzlichen Informationen wie Autor und Tags.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_clean_quote = soup.find("span", attrs={"itemprop": "text"})

print(first_clean_quote.text)

Hier ist die bereinigte Version unseres ersten Zitats.

„Die Welt, wie wir sie geschaffen haben, ist ein Produkt unseres Denkens. Sie kann nicht verändert werden, ohne unser Denken zu verändern.“

Suche anhand mehrerer Kriterien

Wie Sie vielleicht bereits bemerkt haben, nimmt das Argument „attr“ anstelle eines einzelnen Werts ein Dict entgegen. Dadurch können wir mehrere Kriterien für eine noch bessere Filterung übergeben. Hier finden wir den ersten Autor auf der Seite mithilfe der Attribute „class“ und „itemprop “.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_author = soup.find("small", attrs={"class": "author", "itemprop": "author"})
print(first_author.text)

Wenn Sie dies ausführen, sollten Sie Albert Einstein als Ausgabe erhalten.

Albert Einstein

find_all()

Lassen Sie uns nun dieselben Beispiele mit find_all() durchgehen. Auch hier verwenden wir wieder Quotes to Scrape und die Fake Store API. Diese Beispiele sind fast identisch, mit einem wesentlichen Unterschied. find() gibt ein einzelnes Element zurück. find_all() gibt eine Liste von Seitenelementen zurück.

Suche nach Klasse

Um Elemente anhand ihrer Klasse zu finden, verwenden wir das Schlüsselwort-Argument class_. Der folgende Code verwendet find_all(), um jedes Zitat anhand seiner CSS-Klasse zu extrahieren.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

quotes = soup.find_all("div", class_="quote")

for quote in quotes:
    print("-------------")
    print(quote.text)

Wenn wir die erste Seite der Zitate extrahieren und ausdrucken, sieht das so aus.

-------------

„Die Welt, wie wir sie geschaffen haben, ist ein Produkt unseres Denkens. Sie kann nicht verändert werden, ohne unser Denken zu verändern.“
von Albert Einstein
(über)


Tags:

Veränderung
Tiefgründige Gedanken
Denken
Welt


-------------

„Es sind unsere Entscheidungen, Harry, die zeigen, wer wir wirklich sind, viel mehr als unsere Fähigkeiten.“
von J.K. Rowling
(über)


            Tags:
            
Fähigkeiten
Entscheidungen


-------------

„Es gibt nur zwei Möglichkeiten, sein Leben zu leben. Die eine ist, als wäre nichts ein Wunder. Die andere ist, als wäre alles ein Wunder.“
von Albert Einstein
(über)


Tags:

inspirierend
Leben
leben
Wunder
Wunder


-------------

„Wer, ob Mann oder Frau, keine Freude an einem guten Roman hat, muss unerträglich dumm sein.“
von Jane Austen
(über)


            Tags:

Alphabetisierung
Bücher
Klassiker
Humor


-------------

„Unvollkommenheit ist Schönheit, Wahnsinn ist Genialität, und es ist besser, absolut lächerlich zu sein als absolut langweilig.“
von Marilyn Monroe
(über)


            Tags:
            
sei-du-selbst
inspirierend


-------------

„Versuche nicht, ein erfolgreicher Mensch zu werden. Werde lieber ein wertvoller Mensch.“
von Albert Einstein
(über)


            Tags:
            
Erwachsensein
Erfolg
Wert


-------------

„Es ist besser, für das, was man ist, gehasst zu werden, als für das, was man nicht ist, geliebt zu werden.“
von André Gide
(über)


Tags:
            
Leben
Liebe


-------------

„Ich habe nicht versagt. Ich habe nur 10.000 Wege gefunden, die nicht funktionieren.“
von Thomas A. Edison
(über)


            Tags:

Edison
Misserfolg
inspirierend
paraphrasiert


-------------

„Eine Frau ist wie ein Teebeutel: Man weiß nie, wie stark sie ist, bis sie in heißem Wasser liegt.“
von Eleanor Roosevelt
(über)


            Tags:

falsch zugeschrieben-eleanor-roosevelt


-------------

„Ein Tag ohne Sonnenschein ist wie, na ja, die Nacht.“
von Steve Martin
(über)


Tags:

humorvoll
offensichtlich
Gleichnis

Suche nach ID

Wie wir bereits bei der Verwendung von find() besprochen haben, ist id eine weitere gängige Methode, um Daten aus einer Seite zu extrahieren. Um Daten anhand ihrer ID zu extrahieren, verwenden wir das Argument id… genau wie zuvor.

Anschließend suchen wir alle ul -Elemente mit der ID „menu“. Es gibt nur ein Menü, daher finden wir auch nur eines.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://fakestoreapi.com")

soup = BeautifulSoup(response.text, "html.parser")

uls = soup.find_all("ul", id="menu")

for ul in uls:
    print("-------------")
    print(ul.text)

Da es auf der Seite nur ein Menü gibt, ist unsere Ausgabe genau dieselbe wie bei der Verwendung von find().

-------------

Home
Dokumente
GitHub
Kaufen Sie mir einen Kaffee

Suche nach Text

Nun extrahieren wir Elemente aus einer Seite anhand ihres Textes. Dazu verwenden wir das String-Argument. Im folgenden Beispiel suchen wir alle Elemente, die den String „Login” enthalten. Auch hier gibt es wieder nur eines.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

login_buttons = soup.find_all("a", string="Login")

for button in login_buttons:
    print("-------------")
    print(button)

Ihre Ausgabe sollte wie folgt aussehen.

-------------
<a href="/login">Login</a>

Suche nach Attribut

Wenn Sie mit dem Scraping in der Praxis beginnen, müssen Sie häufig andere Attribute verwenden, um Elemente aus der Seite zu extrahieren. Erinnern Sie sich noch an die unübersichtliche Ausgabe aus dem ersten Beispiel? Im nächsten Ausschnitt verwenden wir das Attribut „itemprop” und extrahieren diesmal nur die Anführungszeichen.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

clean_quotes = soup.find_all("span", attrs={"itemprop": "text"})

for quote in clean_quotes:
    print("-------------")
    print(quote.text)

Sehen Sie, wie sauber unsere Ausgabe ist!

-------------
„Die Welt, wie wir sie geschaffen haben, ist ein Produkt unseres Denkens. Sie kann nicht verändert werden, ohne unser Denken zu verändern.“
-------------
„Es sind unsere Entscheidungen, Harry, die zeigen, wer wir wirklich sind, viel mehr als unsere Fähigkeiten.“
-------------
„Es gibt nur zwei Möglichkeiten, sein Leben zu leben. Die eine ist, als wäre nichts ein Wunder. Die andere ist, als wäre alles ein Wunder.“
-------------
„Wer, ob Mann oder Frau, keine Freude an einem guten Roman hat, muss unerträglich dumm sein.“
-------------
„Unvollkommenheit ist Schönheit, Wahnsinn ist Genialität, und es ist besser, absolut lächerlich zu sein als absolut langweilig.“
-------------
„Versuche nicht, ein erfolgreicher Mensch zu werden. Werde lieber ein wertvoller Mensch.“
-------------
„Es ist besser, für das, was man ist, gehasst zu werden, als für das, was man nicht ist, geliebt zu werden.“
-------------
„Ich habe nicht versagt. Ich habe nur 10.000 Wege gefunden, die nicht funktionieren.“
-------------
„Eine Frau ist wie ein Teebeutel: Man weiß nie, wie stark sie ist, bis sie in heißem Wasser liegt.“
-------------
„Ein Tag ohne Sonnenschein ist wie, na ja, die Nacht.“

Suche anhand mehrerer Kriterien

Dieses Mal verwenden wir das Argument „attrs“ auf komplexere Weise. Hier suchen wir alle kleinen Elemente, die eine Klasse „authorund eine Eigenschaft „itemprop“ von „author“ haben. Dazu übergeben wir beide Attribute an unser Wörterbuch „attrs “.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

authors = soup.find_all("small", attrs={"class": "author", "itemprop": "author"})

for author in authors:
    print("-------------")
    print(author.text)

Hier ist unsere Liste der Autoren in der Konsole.

-------------
Albert Einstein
-------------
J.K. Rowling
-------------
Albert Einstein
-------------
Jane Austen
-------------
Marilyn Monroe
-------------
Albert Einstein
-------------
André Gide
-------------
Thomas A. Edison
-------------
Eleanor Roosevelt
-------------
Steve Martin

Fortgeschrittene Techniken

Hier sind einige fortgeschrittenere Techniken. In den folgenden Beispielen verwenden wir find_all(), aber diese Methoden sind auch mit find() kompatibel. Denken Sie nur daran: Möchten Sie ein einzelnes Element oder eine Liste davon?

Regex

Regex ist ein sehr leistungsfähiges Werkzeug für die Zeichenfolgenübereinstimmung. In diesem Codebeispiel kombinieren wir es mit der Zeichenfolge article, um alle Elemente zu finden, die einstein enthalten, unabhängig von ihrer Groß-/Kleinschreibung.

import requests
import re
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

pattern = re.compile(r"einstein", re.IGNORECASE)

tags = soup.find_all(string=pattern)

print(f"Gesamtzahl der Einstein-Zitate: {len(tags)}")

Auf der Seite wurden 3 Zitate gefunden.

Gesamtzahl der Einstein-Zitate: 3

Benutzerdefinierte Funktionen

Schreiben wir nun eine benutzerdefinierte Funktion, um alle tatsächlichen Zitate von Einstein zurückzugeben. Im folgenden Beispiel erweitern wir die reguläre Ausdrucksfunktion. Wir verwenden die übergeordnete Methode, um die Karte mit dem Zitat zu durchsuchen und zu finden. Als Nächstes suchen wir alle Spans. Der erste Span auf der Karte enthält das eigentliche Zitat. Wir geben seinen Inhalt in der Konsole aus.

import requests
import re
from bs4 import BeautifulSoup

def find_einstein_quotes(http_response):
    soup = BeautifulSoup(http_response.text, "html.parser")

    #find all einstein tags
    pattern = re.compile(r"einstein", re.IGNORECASE)
    tags = soup.find_all(string=pattern)

    for tag in tags:
        #den übergeordneten Tags folgen, bis wir die Zitat-Karte haben
        full_card = tag.parent.parent.parent

        #die Spans finden
        spans = full_card.find_all("span")

        #den ersten Span ausgeben, er enthält das eigentliche Zitat
        print(spans[0].text)


if __name__ == "__main__":
    response = requests.get("https://quotes.toscrape.com")
    find_einstein_quotes(response)

Hier ist unsere Ausgabe.

„Die Welt, wie wir sie geschaffen haben, ist ein Produkt unseres Denkens. Sie kann nicht verändert werden, ohne unser Denken zu verändern.“
„Es gibt nur zwei Möglichkeiten, sein Leben zu leben. Die eine ist, als wäre nichts ein Wunder. Die andere ist, als wäre alles ein Wunder.“
„Versuche nicht, ein erfolgreicher Mensch zu werden. Werde lieber ein wertvoller Mensch.“

Bonus: Suchen mit CSS-Selektoren

Die Select-Methode von BeautifulSoup funktioniert fast genauso wie find_all(), ist aber etwas flexibler. Diese Methode verwendet einen CSS-Selektor. Wenn Sie einen Selektor schreiben können, können Sie ihn finden. In diesem Code finden wir wieder alle unsere Autoren anhand mehrerer Attribute. Wir können diese jedoch als einen einzigen Selektor übergeben.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

authors = soup.select("small[class='author'][itemprop='author']")

for author in authors:
    print("-------------")
    print(author.text)

Hier ist unsere Ausgabe.

-------------
Albert Einstein
-------------
J.K. Rowling
-------------
Albert Einstein
-------------
Jane Austen
-------------
Marilyn Monroe
-------------
Albert Einstein
-------------
André Gide
-------------
Thomas A. Edison
-------------
Eleanor Roosevelt
-------------
Steve Martin

Fazit

Jetzt kennen Sie so gut wie alle Aspekte vonfind()undfind_all()in BeautifulSoup. Sie müssen nicht alle diese Methoden beherrschen. Dank der großen Auswahl an Suchmethoden können Sie diejenige auswählen, mit der Sie am besten zurechtkommen. Am wichtigsten ist, dass Sie sie verwenden können, um Daten aus jeder beliebigen Webseite zu extrahieren. In der Produktion, insbesondere für schnelle und zuverlässige Ergebnisse mit einer hohen Erfolgsquote, sollten Sie unsereResidential-Proxysoder sogarunseren Scraping-Browserin Betracht ziehen, der über ein integriertes Proxy-Managementsystem und eine CAPTCHA-Lösung verfügt.

Melden Sie sich noch heute an und testen Sie das Produkt gratis, um das perfekte Produkt für Ihre Anforderungen zu finden.