beautifulsoup Tutorial
Erste Schritte mit beautifulsoup
Suche…
Bemerkungen
In diesem Abschnitt besprechen wir, was Schöne Suppe ist, wofür sie verwendet wird, und eine kurze Beschreibung, wie sie verwendet werden kann.
Beautiful Soup ist eine Python-Bibliothek, die Ihren vorinstallierten HTML / XML-Parser verwendet und die Webseite / HTML / XML in einen Baum konvertiert, der aus Tags, Elementen, Attributen und Werten besteht. Genauer gesagt besteht die Baumstruktur aus vier Objekttypen: Tag, NavigableString, BeautifulSoup und Comment. Dieser Baum kann dann mit den Methoden / Eigenschaften des BeautifulSoup-Objekts "abgefragt" werden, das aus der Parser-Bibliothek erstellt wird.
Ihr Bedarf: Oft haben Sie einen der folgenden Bedürfnisse:
Sie können eine Webseite parsen, um zu ermitteln, wie viele der gefundenen Tags, wie viele Elemente jedes Tags gefunden werden und welche Werte vorhanden sind. Möglicherweise möchten Sie sie ändern.
Möglicherweise möchten Sie die Elementnamen und -werte ermitteln, damit Sie sie zusammen mit anderen Bibliotheken für die Webseitenautomatisierung verwenden können, beispielsweise mit Selenium .
Möglicherweise möchten Sie Daten, die auf einer Webseite angezeigt werden, in andere Formate übertragen oder extrahieren, z. B. eine CSV-Datei oder eine relationale Datenbank, z. B. SQLite oder MySQL. In diesem Fall hilft Ihnen die Bibliothek beim ersten Schritt, die Struktur der Webseite zu verstehen, obwohl Sie zum Übertragen andere Bibliotheken verwenden.
Vielleicht möchten Sie herausfinden, wie viele Elemente mit einem bestimmten CSS-Stil gestaltet wurden und welche.
Sequenz für typische grundlegende Verwendung in Ihrem Python-Code:
Importieren Sie die Schöne Suppenbibliothek
Öffnen Sie eine Webseite oder einen HTML-Text mit der BeautifulSoup-Bibliothek, indem Sie angeben, welcher Parser verwendet werden soll. Das Ergebnis dieses Schritts ist ein BeautifulSoup-Objekt. (Hinweis: Dieser Parsername muss bereits als Teil Ihrer Python-Pakete installiert werden. Zum Beispiel ist
html.parser
ein mit Python mitgeliefertes 'with-html.parser
-Paket. Sie können andere Parser wielxml
installieren oderhtml5lib
.)"Abfrage" oder suchen Sie das BeautifulSoup-Objekt mit der Syntax
'object.method'
und erhalten Sie das Ergebnis in eine Auflistung, z. B. ein Python-Wörterbuch. Bei einigen Methoden ist die Ausgabe ein einfacher Wert.Verwenden Sie das Ergebnis des vorherigen Schritts, um im Rest Ihres Python-Codes alles zu tun, was Sie damit machen möchten. Sie können auch die Elementwerte oder Attributwerte im Baumobjekt ändern. Änderungen wirken sich nicht auf die Quelle des HTML-Codes aus. Sie können jedoch Ausgabeformatierungsmethoden (z. B.
prettify
)prettify
, um eine neue Ausgabe aus dem BeautifulSoup-Objekt zu erstellen.
Häufig verwendete Methoden: Normalerweise werden die Methoden .find
und .find_all
verwendet, um den Baum zu durchsuchen und die Eingabeargumente .find_all
.
Die Eingabeargumente sind: der gesuchte Tag-Name, Attributnamen und andere zugehörige Argumente. Diese Argumente können dargestellt werden als: ein String, ein regulärer Ausdruck, eine Liste oder sogar eine Funktion.
Übliche Verwendungen des BeautifulSoup-Objekts sind:
- Suche nach CSS-Klasse
- Suche nach Hyperlink-Adresse
- Suche nach Element-ID, Tag
- Suche nach Attributname Attributwert.
Wenn Sie den Baum mit einer Kombination der oben genannten Kriterien filtern möchten, können Sie auch eine Funktion schreiben, die als wahr oder falsch ausgewertet wird, und nach dieser Funktion suchen.
Versionen
Ausführung | Bemerkungen | Paketnamen | Veröffentlichungsdatum |
---|---|---|---|
3.x | Version 3.2.1; Nur Python 2 | schöne Suppe | 2012-02-16 |
4.x | Version 4.5.0; Python 2 und 3 | beautifulsoup4 | 2016-07-20 |
Installation oder Setup
pip kann zur Installation von BeautifulSoup verwendet werden. Führen Sie den folgenden Befehl aus, um Version 4 von BeautifulSoup zu installieren:
pip install beautifulsoup4
Beachten Sie, dass der Paketname beautifulsoup4
anstelle von beautifulsoup
lautet. Letzterer Name steht für old release, siehe old beautifulsoup
Ein Beispiel für eine BeautifulSoup "Hello World"
from bs4 import BeautifulSoup
import requests
main_url = "https://fr.wikipedia.org/wiki/Hello_world"
req = requests.get(main_url)
soup = BeautifulSoup(req.text, "html.parser")
# Finding the main title tag.
title = soup.find("h1", class_ = "firstHeading")
print title.get_text()
# Finding the mid-titles tags and storing them in a list.
mid_titles = [tag.get_text() for tag in soup.find_all("span", class_ = "mw-headline")]
# Now using css selectors to retrieve the article shortcut links
links_tags = soup.select("li.toclevel-1")
for tag in links_tags:
print tag.a.get("href")
# Retrieving the side page links by "blocks" and storing them in a dictionary
side_page_blocks = soup.find("div",
id = "mw-panel").find_all("div",
class_ = "portal")
blocks_links = {}
for num, block in enumerate(side_page_blocks):
blocks_links[num] = [link.get("href") for link in block.find_all("a", href = True)]
print blocks_links[0]
Ausgabe:
"Hello, World!" program
#Purpose
#History
#Variations
#See_also
#References
#External_links
[u'/wiki/Main_Page', u'/wiki/Portal:Contents', u'/wiki/Portal:Featured_content', u'/wiki/Portal:Current_events', u'/wiki/Special:Random', u'https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en', u'//shop.wikimedia.org']
Die Eingabe Ihres bevorzugten Parsers bei der Installation von Beautiful Soup vermeidet die übliche Warning
, dass no parser was explicitely specified
.
Es können verschiedene Methoden verwendet werden, um ein Element innerhalb der Webseitenstruktur zu finden.
Obwohl es eine Handvoll anderer Methoden gibt, sind CSS classes
und CSS selectors
zwei praktische Methoden, um Elemente in der Baumstruktur zu finden.
Es sollte beachtet werden, dass wir nach Tags suchen können, indem wir ihren Attributwert bei der Suche auf True setzen.
get_text()
ermöglicht das Abrufen von in einem Tag enthaltenem Text. Es gibt es als eine einzige Unicode-Zeichenfolge zurück. tag.get("attribute")
ermöglicht das tag.get("attribute")
des Attributwerts eines Tags.