13
tengo un documento HTML similar al siguiente:XPath lxml de tabla html
<html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">
<div id="Symbols" class="cb">
<table class="quotes">
<tr><th>Code</th><th>Name</th>
<th style="text-align:right;">High</th>
<th style="text-align:right;">Low</th>
</tr>
<tr class="ro" onclick="location.href='/xyz.com/A.htm';" style="color:red;">
<td><a href="/xyz.com/A.htm" title="Display,A">A</a></td>
<td>A Inc.</td>
<td align="right">45.44</td>
<td align="right">44.26</td>
<tr class="re" onclick="location.href='/xyz.com/B.htm';" style="color:red;">
<td><a href="/xyz.com/B.htm" title="Display,B">B</a></td>
<td>B Inc.</td>
<td align="right">18.29</td>
<td align="right">17.92</td>
</div></html>
necesito para extraer code/name/high/low
información de la tabla.
utilicé siguiente código de uno de los ejemplos similares en la pila sobre el flujo:
#############################
import urllib2
from lxml import html, etree
webpg = urllib2.urlopen(http://www.eoddata.com/stocklist/NYSE/A.htm).read()
table = html.fromstring(webpg)
for row in table.xpath('//table[@class="quotes"]/tbody/tr'):
for column in row.xpath('./th[position()>0]/text() | ./td[position()=1]/a/text() | ./td[position()>1]/text()'):
print column.strip(),
print
#############################
estoy recibiendo ninguna salida. Tengo que cambiar el primer bucle de XPath a table.xpath('//tr')
de table.xpath('//table[@class="quotes"]/tbody/tr')
Simplemente no entiendo por qué el xpath('//table[@class="quotes"]/tbody/tr')
no funciona.
encontré mi problema. De alguna manera, la etiqueta
fue eliminada. De Firebug, el aparece justo después deSí, esto es ** Preguntas frecuentes: los navegadores agregan elementos HTML obligatorios (X) (como 'head' y' tbody') a DOM. ** Por cierto, esto es exactamente lo que @samplebias '[answer] (http: // stackoverflow.com/questions/5586296/problem-with-lxml-xpath-for-html-table-extracting/5586627#5586627) say. –
posible duplicado de [Problema de Python lxml XPath] (http://stackoverflow.com/questions/5333236/python-lxml-xpath-problem) –
Respuesta
Probablemente estés mirando el HTML en Firebug, ¿correcto? El navegador insertará la etiqueta implícita
<tbody>
cuando no esté presente en el documento. La biblioteca lxml solo procesará las etiquetas presentes en la cadena HTML sin procesar.Omita tbody nivel en su XPath. Por ejemplo, esto funciona:
Fuente
2011-04-07 19:38:30 samplebias
Experimenté esto con Chrome también. Estaba usando su función 'Copiar XPath' en el menú 'Examinar' del botón derecho. Un poco tonto. – ficuscr
¿Conoces alguna otra "regla de cambio de ruta" que pueda suceder en FF/Chrome? Sería interesante compilarlos. – lajarre
Cuestiones relacionadas