Selectores nesteds en Scrapy

Tengo problemas para lograr que los selectores nesteds funcionen como se describe en la documentación de Scrapy ( http://doc.scrapy.org/en/latest/topics/selectors.html )

Esto es lo que tengo:

sel = Selector(response) level3fields = sel.xpath('//ul/something/*') for element in level3fields: site = element.xpath('/span').extract() 

Cuando imprimo el “elemento” en el bucle, obtengo < Selector xpath='stuff seen above' data="u'text>

Ahora tengo dos problemas:

  1. En primer lugar, dentro del elemento, también debería haber un nodo “a” (como en <a href ), pero no aparece en la impresión, solo si lo extraigo directamente, luego aparece. ¿Es solo un error de impresión o el “elemento-selector” no contiene el a-nodo (sin extracción)?

  2. cuando imprimo el “sitio” anterior, debería mostrar una lista con los nodos de separación. Sin embargo, no lo hace, solo imprime una lista vacía.

Intenté una combinación de cambios (múltiples a ninguna barra y estrellas (*) en diferentes lugares), pero ninguno de ellos me acercó más.

Esencialmente, solo quiero obtener un Selector nested que me da el nodo de span en el segundo paso (el bucle).

¿Alguien tiene algún consejo?

Con respecto a su primera pregunta, es solo un “error” de impresión. __repr__ métodos __repr__ y __str__ en los selectores solo imprimen los primeros 40 caracteres de los datos (elemento representado como HTML / XML o contenido de texto). Consulte https://github.com/scrapy/scrapy/blob/master/scrapy/selector/unified.py#L143

En su bucle en level3fields debe usar expresiones XPath relativas. Utilizando /span buscaremos elementos span directamente debajo del nodo raíz, eso no es lo que quieres, supongo.

Prueba esto:

 sel = Selector(response) level3fields = sel.xpath('//ul/something') for element in level3fields: site = element.xpath('.//span').extract()