2016-05-22 7 views
-2

Ich habe eine Liste dieser <TD> s und bin mit einem Listenverständnis, um sie alle auf einmal zu bekommen. Suchen, um den Text "v 11/4" in beiden Fällen zu extrahieren, dh mit/ohne die Sup Muss in ein einzelnes Element (für diese Zeile) extrahiert werden.XPATH (wieder) optional Tag-Element extrahieren einzelne Zeichenfolge

ex 1

<td> 
<b class="black">2</b>/6 <a href="/some/link"onclick= 
"returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS 
11)</a>v 11/4</td> 

ex 2

<td> 
<b class="black">2</b>/6 <a href="/some/link"onclick= 
"returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS 
11)</a>v<sup>1</sup> 11/4</td> 

Irgendwelche Ideen?

+0

Was tun Sie den XPath auszuführen, 'lxml', scrapy, Selen, etwas anderes? – har07

+0

scrapy - Problem gelöst – codervince

+0

einfach für Anon-Benutzer zu kommen und Beiträge zu markieren. Komm schon, zeig deine Gesichter. – codervince

Antwort

1

Eine Möglichkeit, Text „v 11/4“ zu identifizieren, die konsistent für beiden <td> Beispiele ‚Verkettung aller direkten Kind Textknoten (von <td>), die nach <a> gelegen‘ wären. Im Folgenden wird beispielhafte Implementierung mit lxml.html:

>>> from lxml import html 
>>> raw = '''<tr> 
... <td> 
... <b class="black">2</b>/6 <a href="/some/link" onclick= 
... "returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS 
... 11)</a>v 11/4</td> 
... <td> 
... <b class="black">2</b>/6 <a href="/some/link" onclick= 
... "returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS 
... 11)</a>v<sup>1</sup> 11/4</td> 
... </tr>''' 
... 
>>> root = html.fromstring(raw) 
>>> result = [''.join(txt for txt in td.xpath("a/following-sibling::text()")).strip() \ 
...    for td in root.xpath("//td")] 
... 
>>> result 
['v 11/4', 'v 11/4'] 
+0

genau das, was ich gesucht habe danke – codervince

Verwandte Themen