Analizando HTML con XPath, Python y Scrapy

Estoy escribiendo un progtwig de Scrapy para extraer los datos.

Esta es la url , y quiero raspar la información de 20111028013117 (código). He tomado XPath de XPather de FireFox . Este es el camino:

 /html/body/p/table/tbody/tr/td/table[2]/tbody/tr[1]/td/table[3]/tbody/tr/td[2]/table[1]/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr/td/table/tbody/tr[2]/td[2] 

Mientras estoy tratando de ejecutar esto

 try: temp_list = hxs.select("/html/body/p/table/tbody/tr/td/table[2]/tbody/tr[1]/td/table[3]/tbody/tr/td[2]/table[1]/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr/td/table/tbody/tr[2]/td[2]").extract() print "temp_list:" + str(temp_list) except: print "error" 

Devuelve una lista vacía, estoy luchando para encontrar una respuesta para esto en las últimas 4 horas. Soy un novato en el tema, aunque manejé muy bien los problemas para otros proyectos, pero parece ser un poco difícil.

La razón por la que su xpath no funciona es porque se trata de un tbody . Debe eliminarlo y comprobar si obtiene el resultado que desea.

Puede leer esto en la documentación de recortes: http://doc.scrapy.org/en/0.14/topics/firefox.html

Firefox, en particular, es conocido por agregar elementos

a las tablas. Scrapy, por otro lado, no modifica el HTML de la página original, por lo que no podrá extraer ningún dato si usa

en sus expresiones XPath.

Veo que el elemento que estás buscando está dentro de una

.

Firefox agrega la etiqueta tbody para cada tabla, incluso si no existe en el código HTML de origen . Esa podría ser la razón por la que su consulta xpath funciona en el navegador, pero falla en Scrapy.

Como se sugiere, use otros anclajes en su consulta xpath.

Puede extraer datos con más facilidad utilizando XPaths más robustos en lugar de tomar la salida directa de XPather.

Para los datos que está comparando, este XPath lo haría mucho mejor:

 //font[contains(text(),'Code')]/parent::td/following-sibling::td/font/text() 

Esto coincidirá con la etiqueta de “TMP” que contiene “Código”, luego vaya a la etiqueta td arriba y seleccione la siguiente font td ->, que contiene el código que está buscando.

¿Ha intentado eliminar algunas tags de nodo al final de la consulta y volver a ejecutar hasta que obtenga un resultado? Haga esto varias veces hasta que obtenga algo, luego agregue los elementos nuevamente con cuidado hasta que se rectifique la consulta.

Además, compruebe que su página de destino se valida como XHTML: una página no válida probablemente alterará el analizador.