SchöneSuppe

Kinderknoten mit schöner Suppe finden

Kinderknoten mit schöner Suppe finden
Die Aufgabe des Web-Scrapings erfordert das Verständnis dafür, wie Webseiten strukturiert sind. Um die benötigten Informationen von Webseiten zu erhalten, muss man die Struktur von Webseiten verstehen, die Tags analysieren, die die benötigten Informationen enthalten, und dann die Attribute dieser Tags.

Für Anfänger im Web-Scraping mit BeautifulSoup finden Sie hier einen Artikel über die Konzepte des Web-Scrapings mit dieser leistungsstarken Bibliothek library.

Dieser Artikel richtet sich an Programmierer, Datenanalysten, Wissenschaftler oder Ingenieure, die bereits über die Fähigkeiten zum Extrahieren von Inhalten aus Webseiten mit BeautifulSoup . verfügen. Wenn Sie diese Bibliothek noch nicht kennen, empfehle ich Ihnen, die BeautifulSoup-Anleitung für Anfänger durchzuarbeiten.

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 BeautifulSoup4

Da wir mit dem Extrahieren von Daten aus HTML arbeiten, benötigen wir eine grundlegende HTML-Seite, um diese Konzepte zu üben.  Für diesen Artikel würden wir dieses HTML-Snippet zum Üben verwenden. Ich werde das folgende HTML-Snippet einer Variablen zuweisen, indem ich die dreifachen Anführungszeichen in Python verwende.

sample_content = """

LinuxHinweis



Um eine ungeordnete Liste zu erstellen, wird das ul-Tag verwendet:
 




Um eine geordnete Liste zu erstellen, wird das ol-Tag verwendet:
 


    Hier ist eine geordnete Liste
  1. Nummer Eins

  2. Nummer zwei



Linux-Hinweis, 2018



"""

Nachdem wir das geklärt haben, können wir direkt mit der BeautifulSoup-Bibliothek arbeiten.

Wir werden einige Methoden und Attribute verwenden, die wir für unser BeautifulSoup-Objekt aufrufen würden. Allerdings müssten wir unseren String mit BeautifulSoup parsen und dann einer „our_soup“-Variable zuweisen.

von bs4 importieren BeautifulSoup als bso
our_soup = bso(sample_content, "lxml")

Von nun an würden wir mit der Variable „our_soup“ arbeiten und alle unsere Attribute oder Methoden darauf aufrufen.

Kurz gesagt, wenn Sie noch nicht wissen, was ein untergeordneter Knoten ist, handelt es sich im Grunde um einen Knoten (Tag), der in einem anderen Knoten vorhanden ist. In unserem HTML-Snippet zum Beispiel sind die li-Tags untergeordnete Knoten sowohl der „ul“- als auch der „ol“-Tags.

Hier sind die Methoden, die wir uns ansehen würden:

findChild():

Das findChild -Methode wird verwendet, um den ersten untergeordneten Knoten von HTML-Elementen zu finden. Wenn wir uns zum Beispiel unsere Tags „ol“ oder „ul“ ansehen, würden wir darin zwei untergeordnete Tags finden. Wenn wir jedoch die findChild Methode gibt sie nur den ersten Knoten als untergeordneten Knoten zurück.

Diese Methode könnte sich als sehr nützlich erweisen, wenn wir nur den ersten untergeordneten Knoten eines HTML-Elements erhalten möchten, da sie sofort das erforderliche Ergebnis zurückgibt.

Das zurückgegebene Objekt ist vom Typ bs4.Element.Etikett. Wir können den Text daraus extrahieren, indem wir das Textattribut darauf aufrufen.

Hier ist ein Beispiel:

erstes_kind = unsere_suppe.find("Körper").find("ol")
print(erstes_Kind.findChild())

Der obige Code würde Folgendes zurückgeben:

  • Nummer Eins
  • Um den Text aus dem Tag zu erhalten, rufen wir die Text Attribut drauf.

    Mögen:

    print(erstes_Kind.findChild().Text)

    Um das folgende Ergebnis zu erhalten:

    'Nummer Eins'
    findKinder():

    Wir haben uns das angeschaut findChild Methode und gesehen, wie es funktioniert. Das findKinder Methode funktioniert auf ähnliche Weise, aber wie der Name schon sagt, findet sie nicht nur einen untergeordneten Knoten, sondern alle untergeordneten Knoten in einem Tag.

    Wenn Sie alle untergeordneten Knoten in einem Tag abrufen müssen, findKinder Methode ist der richtige Weg. Diese Methode gibt alle untergeordneten Knoten in einer Liste zurück. Sie können auf das Tag Ihrer Wahl über seine Indexnummer zugreifen.

    Hier ist ein Beispiel:

    erstes_kind = unsere_suppe.find("Körper").find("ol")
    print(erstes_Kind.findKinder())

    Dies würde die untergeordneten Knoten in einer Liste zurückgeben:

    [
  • Nummer Eins
  • ,
  • Nummer zwei
  • ]

    Um den zweiten untergeordneten Knoten in der Liste abzurufen, würde der folgende Code die Aufgabe erledigen:

    print(erstes_Kind.findKinder ()[1])

    Um das folgende Ergebnis zu erhalten:

  • Nummer zwei
  • Das ist alles, was BeautifulSoup in Sachen Methoden bietet. Damit ist es jedoch noch nicht getan. Attribute können auch für unsere BeautifulSoup-Objekte aufgerufen werden, um den Child/Child/Descendant-Knoten von einem HTML-Element zu erhalten.

    Inhalt:

    Während findKinder -Methode hat die einfache Aufgabe des Extrahierens der untergeordneten Knoten, der Inhalt Attribute macht etwas anderes.

    Das Inhalt -Attribut gibt eine Liste des gesamten Inhalts in einem HTML-Element zurück, einschließlich der untergeordneten Knoten. Also wenn du die anrufst Inhalt Attribut für ein BeautifulSoup-Objekt, würde es den Text als Strings und die Knoten in den Tags als a . zurückgeben bs4.Element.Etikett Objekt.

    Hier ist ein Beispiel:

    erstes_kind = unsere_suppe.find("Körper").find("ol")
    print(erstes_Kind.Inhalt)

    Dies gibt Folgendes zurück:

    ["\n   Hier ist eine geordnete Liste\n   ",
  • Nummer Eins
  • ,
    '\n',
  • Nummer zwei
  • , '\n']

    Wie Sie sehen, enthält die Liste den Text, der vor einem untergeordneten Knoten steht, den untergeordneten Knoten und den Text, der nach dem untergeordneten Knoten steht.

    Um auf den zweiten untergeordneten Knoten zuzugreifen, müssen wir nur seine Indexnummer verwenden, wie unten gezeigt:

    print(erstes_Kind.Inhalt[3])

    Dies würde Folgendes zurückgeben:

  • Nummer zwei
  • Kinder:

    Hier ist ein Attribut, das fast dasselbe tut wie das content-Attribut does. Es gibt jedoch einen kleinen Unterschied, der eine große Wirkung haben könnte (für diejenigen, die die Codeoptimierung ernst nehmen).

    Das children-Attribut gibt auch den Text zurück, der vor einem Child-Knoten steht, den Child-Knoten selbst und den Text, der nach dem Child-Knoten kommt. Der Unterschied besteht darin, dass sie als Generator anstelle einer Liste zurückgegeben werden.

    Schauen wir uns das folgende Beispiel an:

    erstes_kind = unsere_suppe.find("Körper").find("ol")
    print(erstes_Kind.Kinder)

    Der obige Code liefert die folgenden Ergebnisse (die Adresse auf Ihrem Computer muss nicht mit der untenstehenden übereinstimmen):

    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:

    erstes_kind = unsere_suppe.find("Körper").find("ol")
    print(list(first_child.Kinder))

    Dies ergibt folgendes Ergebnis:

    ["\n        Hier ist eine geordnete Liste\n        ",
  • Nummer Eins
  • ,
    '\n',
  • Nummer zwei
  • , '\n']

    Nachkommenschaft:

    Während Kinder Attribut funktioniert, um nur den Inhalt innerhalb eines Tags zu erhalten.e. der Text und Knoten auf der ersten Ebene, die Nachkommenschaft Attribut geht tiefer und tut mehr.

    Das Nachkommenschaft Attribut ruft den gesamten Text und die Knoten ab, die in untergeordneten Knoten vorhanden sind. Es werden also nicht nur Kinderknoten zurückgegeben, sondern auch Enkelknoten.

    Neben der Rückgabe von Text und Tags gibt es auch den Inhalt in den Tags als Strings zurück.

    Genau wie die Kinder Attribut, Nachkommenschaft gibt seine Ergebnisse als Generator zurück.

    Wir können dies unten sehen:

    erstes_kind = unsere_suppe.find("Körper").find("ol")
    print(erstes_Kind.Nachkommenschaft)

    Dies ergibt folgendes Ergebnis:

    Wie zuvor gesehen, können wir dieses Generatorobjekt dann in eine Liste umwandeln:

    erstes_kind = unsere_suppe.find("Körper").find("ol")
    print(list(first_child.Nachkommenschaft))

    Wir würden die folgende Liste erhalten:

    ["\n   Hier ist eine geordnete Liste\n   ",
  • Nummer Eins
  • ,
    'Nummer Eins', '\n',
  • Nummer zwei
  • , 'Nummer zwei', '\n']

    Fazit

    Da haben Sie es, fünf verschiedene Möglichkeiten, auf untergeordnete Knoten in HTML-Elementen zuzugreifen. Es könnte mehr Möglichkeiten geben, aber mit den in diesem Artikel besprochenen Methoden und Attributen sollte man in der Lage sein, auf den untergeordneten Knoten jedes HTML-Elements zuzugreifen.

    So kehren Sie die Scrollrichtung von Maus und Touchpads in Windows 10 um
    Maus und Touchpads machen das Rechnen nicht nur einfach, sondern auch effizienter und weniger zeitaufwendig. Wir können uns ein Leben ohne diese Gerät...
    So ändern Sie Mauszeiger- und Cursorgröße, Farbe und Schema unter Windows 10
    Der Mauszeiger und der Cursor in Windows 10 sind sehr wichtige Aspekte des Betriebssystems. Dies kann auch für andere Betriebssysteme gesagt werden, a...
    Kostenlose und Open-Source-Spiele-Engines für die Entwicklung von Linux-Spielen
    Dieser Artikel behandelt eine Liste von kostenlosen und Open-Source-Spiele-Engines, die für die Entwicklung von 2D- und 3D-Spielen unter Linux verwend...