Für Anfänger im Web -Scraping mit BeautifulSoup finden Sie einen Artikel, in dem die Konzepte des Web -Scabings mit dieser leistungsstarken Bibliothek erörtert werden können.
Dieser Artikel richtet sich an Programmierer, Datenanalysten, Wissenschaftler oder Ingenieure, die bereits über die Fähigkeiten verfügen, Inhalte von Webseiten mit BeautifulSoup zu extrahieren. Wenn Sie keine Kenntnisse über diese Bibliothek haben, empfehle ich Ihnen, das BeautifulSoup -Tutorial für Anfänger zu durchlaufen.
Jetzt können wir fortfahren - ich möchte glauben, dass Sie diese Bibliothek bereits installiert haben. Wenn nicht, können Sie dies mit dem folgenden Befehl tun:
PIP Installieren Sie BeautifulSoup4Da wir daran arbeiten, Daten aus HTML zu extrahieren, müssen wir eine grundlegende HTML -Seite haben, um diese Konzepte zu praktizieren. Für diesen Artikel würden wir diesen HTML -Snippet zum Üben verwenden. Ich werde eine Variable mit den dreifachen Zitaten in Python dem folgenden HTML -Snippet zuweisen.
Sample_Content = "" "
Um eine ungeordnete Liste zu erstellen, wird das UL -Tag verwendet:
Um eine bestellte Liste zu erstellen, wird das OL -Tag verwendet:
Linux Hint, 2018
Jetzt, da wir das sortiert haben, gehen wir direkt in die Arbeit mit der wunderschönen Bibliothek ein.
Wir werden ein paar Methoden und Attribute verwenden, die wir unser wunderschönes Objekt anrufen würden. Wir müssten jedoch unsere Zeichenfolge mit BeautifulSoup analysieren und dann einer "Our_Soup" -Variable zuweisen.
von BS4 importieren Sie BeautifulSoup als BSOVon nun an würden wir mit der Variablen „Our_Soup“ zusammenarbeiten und alle unsere Attribute oder Methoden darauf aufrufen.
Wenn Sie nicht bereits wissen, was ein Kinderknoten ist, ist es im Grunde genommen ein Knoten (Tag), der in einem anderen Knoten existiert. In unserem HTML -Snippet zum Beispiel sind die Li -Tags Kinderknoten sowohl der "UL" als auch der "OL" -Tags.
Hier sind die Methoden, die wir uns ansehen würden:
findchild ():
Der Findchild Die Methode wird verwendet, um den ersten untergeordneten Knoten von HTML -Elementen zu finden. Wenn wir uns beispielsweise unsere "OL "- oder" UL "-Tags ansehen, finden wir zwei Kinder -Tags darin. Allerdings, wenn wir das verwenden Findchild Methode gibt es nur den ersten Knoten als Kinderknoten zurück.
Diese Methode könnte sich als sehr nützlich erweisen, wenn wir nur den ersten Kinderknoten eines HTML -Elements erhalten möchten, da sie das erforderliche Ergebnis sofort zurückgibt.
Das zurückgegebene Objekt ist vom Typ BS4.Element.Schild. Wir können den Text aus ihm extrahieren, indem wir das Textattribut darauf aufrufen.
Hier ist ein Beispiel:
First_Child = Our_Soup.finde ("Körper").Finden ("ol")Der obige Code würde Folgendes zurückgeben:
Um den Text aus dem Tag zu erhalten, rufen wir das auf Text Attribut darauf.
Wie:
print (first_child.findchild ().Text)Um das folgende Ergebnis zu erzielen:
'Nummer Eins'Wir haben uns das angesehen Findchild Methode und gesehen, wie es funktioniert. Der Findchildren Die Methode funktioniert auf ähnliche Weise, aber wie der Name schon sagt, findet nicht nur ein Kinderknoten, sondern alle Kinderknoten in ein Tag.
Wenn Sie alle Kinderknoten in ein Tag bekommen müssen, die Findchildren Methode ist der richtige Weg. Diese Methode gibt alle Kinderknoten in einer Liste zurück. Sie können auf das Tag Ihrer Wahl mithilfe der Indexnummer zugreifen.
Hier ist ein Beispiel:
First_Child = Our_Soup.finde ("Körper").Finden ("ol")Dies würde die Kinderknoten in einer Liste zurückgeben:
[Um den zweiten untergeordneten Knoten in die Liste zu erhalten, würde der folgende Code den Job erledigen:
print (first_child.findchildren () [1])Um das folgende Ergebnis zu erzielen:
Das ist alles wunderschöne, wenn es um Methoden geht. Es endet jedoch nicht dort. Attribute können auch unsere wunderschönen Objekte aufgerufen werden, um den Kind/Kinder/Nachkommenknoten von einem HTML -Element zu erhalten.
Inhalt:
Während Findchildren Die Methode hat die unkomplizierte Aufgabe des Extrahierens der Kinderknoten erledigt, die Inhalt Attribute machen etwas anderes.
Der Inhalt Attribut gibt eine Liste aller Inhalte in einem HTML -Element zurück, einschließlich der Kinderknoten. Also, wenn Sie das anrufen Inhalt Attribut für ein wunderschönes Objekt würde den Text als Saiten und die Knoten in den Tags als a zurückgeben BS4.Element.Schild Objekt.
Hier ist ein Beispiel:
First_Child = Our_Soup.finde ("Körper").Finden ("ol")Dies gibt Folgendes zurück:
["\ n Hier ist eine bestellte Liste \ n",Wie Sie sehen können, enthält die Liste den Text, der vor einem Kinderknoten, dem untergeordneten Knoten und dem nach dem Kinderknoten kommt.
Um auf den zweiten untergeordneten Knoten zuzugreifen, müssen wir lediglich die Indexnummer verwenden, wie unten gezeigt:
print (first_child.Inhalt [3])Dies würde Folgendes zurückgeben:
Kinder:
Hier ist ein Attribut, das fast dasselbe wie das Inhaltsattribut tut. Es hat jedoch einen kleinen Unterschied, der einen großen Einfluss haben könnte (für diejenigen, die die Codeoptimierung ernst nehmen).
Das Kinderattribut gibt auch den Text zurück, der vor einem Kinderknoten, dem Kinderknoten selbst und dem Text, der nach dem Kinderknoten kommt. Der Unterschied hier ist, dass es sie als Generator anstelle einer Liste zurückgibt.
Schauen wir uns das folgende Beispiel an:
First_Child = Our_Soup.finde ("Körper").Finden ("ol")Der obige Code enthält die folgenden Ergebnisse (die Adresse auf Ihrem Computer muss nicht mit dem unten stehenden):
Wie Sie sehen können, gibt es nur die Adresse des Generators zurück. Wir könnten diesen Generator in eine Liste umwandeln.
Wir können dies im folgenden Beispiel sehen:
First_Child = Our_Soup.finde ("Körper").Finden ("ol")Dies ergibt das folgende Ergebnis:
["\ n Hier ist eine bestellte Liste \ n",Nachkommenschaft:
Während Kinder Attribut funktioniert, um nur den Inhalt in einem Tag i zu erhalten.e. der Text und Knoten auf der ersten Ebene, der Nachkommenschaft Attribut geht tiefer und macht mehr.
Der Nachkommenschaft Attribut erhält alle Text und Knoten, die in Kinderknoten existieren. Es gibt also nicht nur Kinderknoten zurück, sondern auch Enkelkinderknoten zurück.
Durch die Rückgabe des Textes und der Tags wird auch der Inhalt in den Tags auch als Zeichenfolgen zurückgegeben.
Genau wie das Kinder Attribut, Nachkommenschaft Gibt seine Ergebnisse als Generator zurück.
Wir können dies unten sehen:
First_Child = Our_Soup.finde ("Körper").Finden ("ol")Dies ergibt das folgende Ergebnis:
Wie bereits erwähnt, können wir dieses Generatorobjekt dann in eine Liste umwandeln:
First_Child = Our_Soup.finde ("Körper").Finden ("ol")Wir würden die Liste unten erhalten:
["\ n Hier ist eine bestellte Liste \ n",Abschluss
Dort haben Sie es, fünf verschiedene Möglichkeiten, um auf Kinderknoten in HTML -Elementen zuzugreifen. Es kann mehr Möglichkeiten geben, aber mit den in diesem Artikel diskutierten Methoden und Attributen sollte man in der Lage sein, auf den untergeordneten Knoten eines HTML -Elements zugreifen zu können.