0. Überblick
Im ersten Teil von XPath haben wir die grundlegenden Konzepte und die grundlegende Syntax von XPath behandelt, die für das Web-Scraping unerlässlich sind. Im zweiten Teil werden wir fortgeschrittene Inhalte zu XPath behandeln.
1. Verständnis von Platzhaltern
Bevor wir zu den fortgeschrittenen Inhalten übergehen, ist es wichtig, das Konzept des Platzhalters ('*') in XPath zu verstehen.
- Der Platzhalter ('*') passt in XPath zu jedem Element und wird verwendet, um alle Elemente auszuwählen. Ich werde dies anhand eines Beispiels erklären.
//div[contains(@class, "aa")]
Das obige XPath bezieht sich auf das div-Element mit der Klasse 'aa'. Was passiert, wenn anstelle von div ein Platzhalter verwendet wird?
//*[contains(@class, "aa")]
In obigem XPath passt '*' zu allen Elementen, daher wählt dieser XPath alle Elemente mit der Klasse 'aa' aus.
2. Verständnis der Hierarchie in XPath
Lassen Sie uns nun in die fortgeschrittenen Inhalte von XPath eintauchen.
Hier ist ein einfacher HTML-Code.
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<EEE>
<FFF>
<GGG/>
<GGG/>
<III>
<JJJ/>
</III>
</FFF>
</EEE>
<KKK>
<LLL/>
</KKK>
</AAA>
Die Elemente und Attribute im HTML-Code bilden eine Hierarchie, die in XPath als Baumstruktur dargestellt wird. Achsen sind Richtungen oder Beziehungen, die verwendet werden, um Knoten (Datenpunkte, Einheiten) in der Baumstruktur zu referenzieren und auszuwählen. Es gibt Achsen wie self-Achse, parent-Achse, child-Achse, und ich werde sie nacheinander anhand von Beispielen erklären.
Wenn die Hierarchie der obigen Elemente in einem Diagramm dargestellt wird, sieht es wie folgt aus.
Lassen Sie uns nun sehen, wie Knoten mithilfe von Achsen dargestellt werden können.
3. Darstellung von Knoten
3.1. self
: Stellt den aktuellen Knoten selbst dar.
/AAA/self::*
Das obige XPath wählt das Element <AAA> aus, das der aktuelle Knoten ist.
3.2. parent
: Stellt den Elternknoten des aktuellen Knotens dar.
/AAA/EEE/FFF/parent::*
Das obige XPath wählt den Elternknoten <EEE> des aktuellen Knotens <FFF> aus.
3.3. child : Stellt die Kindknoten des aktuellen Knotens dar.
/AAA/EEE/FFF/child::*
Das obige XPath wählt alle Kindknoten <GGG>, <HHH>, <III> des aktuellen Knotens <FFF> aus.
Wenn Sie nur das Element <III> auswählen möchten, können Sie das XPath wie folgt ändern.
/AAA/EEE/FFF/child::III
Wenn Sie das erste <GGG> Element auswählen möchten, können Sie es wie folgt ändern.
/AAA/EEE/FFF/child::GGG[1]
Bitte beachten Sie, dass in XPath die Indizes ab 1 beginnen, im Gegensatz zu den meisten anderen Programmiersprachen!
3.3. Vorfahre
: Stellt alle Vorfahrenknoten des aktuellen Knotens dar.
/AAA/EEE/FFF/ancestor::*
Das obige XPath wählt alle Vorfahrenknoten <EEE>, <AAA> des aktuellen Knotens <FFF> aus.
3.4. Nachkomme
: Stellt alle Nachkommenknoten des aktuellen Knotens dar.
/AAA/EEE/FFF/descendant::*
Das obige XPath wählt alle Nachkommenknoten <GGG>, <HHH>, <III>, <JJJ> des aktuellen Knotens <FFF> aus.
3.5. Vorfahre-oder-self
: Stellt den aktuellen Knoten und alle Vorfahrenknoten des aktuellen Knotens dar.
/AAA/EEE/FFF/ancestor-or-self::*
Das obige XPath wählt sowohl den aktuellen Knoten <FFF> als auch die Vorfahrenknoten <EEE>, <AAA> aus.
3.6. Nachkomme-oder-self
: Stellt den aktuellen Knoten und alle Nachkommenknoten des aktuellen Knotens dar.
/AAA/EEE/FFF/descendant-or-self::*
Das obige XPath wählt sowohl den aktuellen Knoten <FFF> als auch die Nachkommenknoten <GGG>, <HHH>, <III>, <JJJ> aus.
3.7. folgend
: Stellt alle Knoten dar, die nach dem Schließen des Tags des aktuellen Knotens kommen.
/AAA/EEE/following::*
Das obige XPath wählt alle Knoten <FFF>, <GGG>, <HHH>, <III>, <JJJ>, <KKK>, <LLL> aus, die nach dem aktuellen Knoten <EEE> kommen.
3.8. vorhergehend
: Stellt alle Knoten dar, die vor dem Beginn des Tags des aktuellen Knotens kommen.
/AAA/EEE/preceding::*
Das obige XPath wählt alle Knoten <BBB>, <CCC>, <DDD> aus, die vor dem aktuellen Knoten <EEE> kommen.
3.9. folgendes-Geschwister
: Stellt alle nachfolgenden Geschwisterknoten des aktuellen Knotens dar.
/AAA/EEE/following-sibling::*
Das obige XPath wählt das nachfolgende Geschwisterknoten <KKK> des aktuellen Knotens <EEE> aus.
3.10. vorheriges-Geschwister
: Stellt alle vorherigen Geschwisterknoten des aktuellen Knotens dar.
/AAA/EEE/preceding-sibling::*
Das obige XPath wählt das vorherige Geschwisterknoten <BBB> des aktuellen Knotens <EEE> aus.
Bis hierhin haben wir die Achsen, die zur Darstellung von Knoten in XPath verwendet werden, behandelt.
Zusätzlich werden wir zwei weitere Funktionen betrachten, die in XPath verwendet werden können.
4. Funktionen in XPath
4.1. count
: Gibt die Anzahl der Knoten zurück, die einer bestimmten Bedingung entsprechen.
#class 속성 값이 ‘example인 div 요소의 개수를 반환
count(//div[@class="example"])
#p 요소의 총 개수를 반환
count(//p)
4.2. position
: Gibt die Position des aktuellen Knotens zurück. (Die Position beginnt bei 1 und erhöht sich sequenziell.)
<root>
<item>Item 1</item>
<item>Item 2</item>
<item>Item 3</item>
</root>
Wenn Sie beispielsweise den folgenden XML-Code haben, können Sie XPath wie folgt schreiben.
//item[position() = 2]
Mit der position-Funktion können Sie das zweite item-Element auswählen, wenn es drei item-Elemente gibt.
5. Fazit
Bis hierhin haben wir fortgeschrittene Inhalte zu XPath behandelt. Wenn Sie von den Grundlagen bis zu den fortgeschrittenen Themen alles gemeistert haben, haben Sie bereits ein solides Grundwissen, um mit XPath genau die gewünschten Elemente aus XML-Dokumenten zu finden und Daten zu extrahieren.
XPath ist ein leistungsstarkes Werkzeug zum Navigieren und Manipulieren von XML-Dokumenten und wird in der Praxis in verschiedenen Bereichen wie Daten-Scraping, Web-Scraping und der Extraktion von Daten aus XML-basierten Webdiensten eingesetzt. Ich hoffe, dass Sie erfolgreich Daten mit XPath effizient extrahieren und nutzen können!
Lesen Sie auch diesen Artikel:
Daten sammeln, jetzt automatisieren
Beginnen Sie in 5 Minuten ohne Codierung · Erfahrung mit dem Crawlen von über 5.000 Websites




