2016-11-08 10 views
0

Ich habe folgende HTML:Text aus HTML extrahieren (nach bestimmten Zeichenfolge)

<li class="group-ib medium-gap line-120 vertical-offset-10"> 
    <i class="fa fa-angle-right font-bold font-95 text-primary text-dark"> 
     ::before 
    </i> 
    <span> 
     abc: 
     <b class="text-primary text-dark">st1</b> 
    </span> 
</li> 

Und ich will str1 extrahieren, die immer nach abc passiert. Ich war in der Lage, es zu tun mit Hilfe des XPATH Link:

xpath('.//b[@class = "text-primary text-dark"]')[0].text 

Aber die Lösung davon abhinge das erste Auftreten dieser besonderen Klasse zu sein, die mehr als einmal erscheint und ist nicht immer in der gleichen Reihenfolge. Ich fragte mich, ob es eine Möglichkeit gab, die HTML für abc zu suchen und den nachfolgenden Text zu ziehen?

+1

Ich frage mich, wie hast du 'str1' mit dem XPath in deiner Frage bekommen? Alles, was Sie bekommen, ist das Element "i", wobei "str1" im Element "span" steht. – SomeDude

+0

Sloppy Copy Paste, bearbeitet. –

+0

Die Verwendung von [0] in Ihrem xpath würde nur dann einen Unterschied machen, wenn sich die Elemente in einer Liste befinden. Da sie auf verschiedenen Ebenen liegen, ist dies egal. Für verschiedene Ebenen müssen Sie Selektor verwenden, um ein eindeutiges Elternelement zu identifizieren und von dort fortzufahren. – lauda

Antwort

1

Vielleicht finden Sie das Element, das abc enthält, navigieren Sie zu Kind/Eltern, wenn nötig, erhalten Sie Text.
Beispiel für Selektoren:

  1. jede Suche (* ist für jeden Tag) Element, die abc Text enthält und jedes Kind auswählen.
    //*[contains(text(), 'abc')]/*

  2. Angebote: Alle (* ist für jeden Tag) Element, das abc Text enthält, und wählen Sie seine b Kind.
    //*[contains(text(), 'abc')]/b

  3. li Element finden, die ein Element aufweist, das Text aus seinem Inneren abc und wählen Sie b Element enthält (innen li), verwenden // seit b von li nicht das erste Kind ist.
    //li[.//[contains(text(), 'abc')]]//b

Wenn Sie wissen abc dann von dort aus starten, sehen, was Element zurückgegeben wird und wenn an Eltern/Vorfahre/Kind navigieren erforderlich.

Weitere Informationen zu XPath finden Sie w3schools xpath selectors

0

Die folgende XPath den Text geben, sollten Sie für die Suche sind

//*[contains(text(),'abc')]/*[@class='text-primary text-dark'][1]/text()

die Annahme str1 Sie suchen sollten immer mit dem Attribut unter Elemente sein class=text-primary text-dark

auch unter der Annahme, dass Sie das erste solche Vorkommen erhalten möchten (ignorieren Sie die anderen text-primary text-dark s) - deshalb [1]

Dieser xpath stellt sicher, dass der Knoten, nach dem Sie suchen, einen Text abc hat, bevor Sie sie durchsuchen.

Verwandte Themen