2017-07-05 5 views
0

Ich bin eine HTML-Seite als String lesen und verwenden tree = html.fromstring(data)mit XPath mit Python lxml abfragen html

ich jetzt lxml XPath abfragen verwenden möchten. Im Folgenden finden Sie ein Beispiel für die Teilnahme an interessiert ich bin.

<table class="class"> 
<tbody> 
    <tr> 
    <th class="classTh"> 
    Overall 
    </th> 
    <td class="classTd"> 
    <span class="classSpan"> 
    GREEN 
    </span> 
    </td> 
    </tr> 
</tbody> 
</table> 

mit dem Aufruf

xpath = '//table/tbody/tr[th="Overall"]/td/span' 
e = tree.xpath(xpath) 
    for i in e: 
    print(i.text) 

ich XPath bin mit dem Daten zu erhalten, die ich brauche. Aber ich kann den XPath nicht zur Arbeit bringen. Die Verwendung dieses genauen Codes + XPath in jedem Online-Tester funktioniert für mich.

Ich habe mit XPath versucht:

xpath = '//table/tbody/tr[th]/td/span' 

, die mir alle Elemente statt diejenigen, die mit dem richtigen Filterwert bekommt.

xpath ='//table/tbody/tr[td/span]/th' 

bekommt mich alle Filterwerte.

Also meine Frage. Wie kann ich den Text-Wert-Filter in meinem XPath korrekt anwenden?

+0

Wenn Sie es mit Online-XPath-Tester versuchen, behandeln Sie Webseite mit bereits ausgeführtem JavaScript, während Ihre Tabelle dynamisch generiert werden kann und HTTP-Bibliotheken wie 'requests',' urllib' usw. nur Seitenquellen ohne JavaScript zur Verfügung gestellt – Andersson

+0

Da die 2 letzten XPath-Abfragen dazu dienen, zu bestätigen, dass die Daten, die ich abfrage, korrekt sind, dachte ich nicht, dass es ein Problem mit den Daten selbst geben würde. Stattdessen habe ich unter dem Eindruck ein Problem mit der Abfrage. Oder verpasse ich den Punkt? :) – Martin

Antwort

1

Die Syntax für diese XPath in lxml ist die folgende:

xpath = "//table/tbody/tr[th[contains(text(), 'Overall')]]/td/span" 

Welche mein Problem gelöst.