2017-02-03 1 views
1

Ich verwende einen Xpath in Python, um eine Tabelle aus einer HTML-Datei zu analysieren. Ich bin mit diesen XPath:Wie entferne ich etwas aus text() mit Hilfe von xpath?

//td//text() 

Diese geben mir Ausgabe als zwei Strings:

['australia', '$3333.99'] 

Ausgang Ich möchte:

['australia', '3333.99'] 

aber ich möchte $ -Zeichen werden beraubt wie kann mache ich das im Allgemeinen mit XPath? Ich habe versucht, substring-after, aber es funktioniert nicht.

dies ist, wie ich versucht:

//td//text()[substring-after(.,'$')] 

, aber ich habe diese Ausgabe:

['$3333.99'] 

Australia wurde von der Verwendung translate() aus dem Ergebnis

+0

Der Ausdruck, den Sie ist versucht, nicht zeigen in XPath 2.0, aber nicht in XPath 1.0. Sie sollten angeben, welche XPath-Version Sie verwenden. Obwohl es nicht ganz das tut, was du willst: probiere '// td // text()/substring-after (., '$')' –

Antwort

1

Abgesehen fehlt (wie in den anderen geschrieben Antwort), können Sie auch substring() function verwenden und den Beginn eines Slices dynamisch bestimmen:

In [4]: [item.xpath("substring(., starts-with(., '$') + 1)") for item in root.xpath("//td")] 
Out[4]: ['australia', '3333.99'] 

By the way, ist dieser Ansatz ein bisschen sicherer als translate() verwenden, da, hier sind wir nur ein einziges $ Zeichen am Anfang eines Strings Strippen, wenn es vorhanden ist, aber translate() würde ersetzen alle Vorkommen von $ in jeder td Text, den Sie extrahieren. Sie können einige unerwünschte Nebenwirkungen bekommen.

Beachten Sie, dass Sie tun müssen, um es in zwei Schritten in jedem Fall - die translate() oder substring() Funktionen nicht an jeden Knoten wie translate(//td//text(), "$", ""), Referenzen, wenn verwendet, angewendet werden:

Oder Sie können es mit Python und .lstrip():

trimmen
[item.lstrip("$") for item in root.xpath("//td//text()")] 
+0

ich bin mir dessen bewusst, aber ich möchte nicht über die Liste loopen, weil ich es habe mehr als 500 von ihnen, macht es die Funktion langsam. Ich suchte nach einem Weg mit Xpath Mayb mit 'translate' – anekix

+0

@anekix Gotcha, arbeiten daran, danke. – alecxe

+0

danke, auf Antwort warten – anekix

0
//td//text()[substring-after(.,'$')] 

Dies wird die text() in ['australia', '$3333.99'], und für die es bewerten australia, Dosis $ nicht enthält, diese false zurück und wird in der Folge

[td.xpath('translate(., "$", "")')for td in tree.xpath("//td")] 
+0

danke für die Antwort wie .whats der richtige Weg? – anekix

+0

@anekix Xpath wird verwendet, um das Tag zu lokalisieren, das Tag nicht zu ändern. ja, xpath Pfad kann diese Aufgabe erledigen, aber python 'strip' ist die bessere Wahl. –

+0

Ich habe wie 500 Listen zu verwenden lstrip auf seine nicht die große Sache, die ich weiß, aber ich habe thi für 400 Tabellen so jetzt seine 400X500 ist eine teure Schleife ich denke, und es verlangsamt meine Anwendung – anekix