Scrapy - Consejos Xpath
Usar nodos de texto en una condición
Cuando esté utilizando nodos de texto en una función de cadena XPath, utilice .(dot) En lugar de usar .//text(), porque esto produce la colección de elementos de texto llamados como node-set.
Por ejemplo
from scrapy import Selector
val = Selector(text = '<a href = "#">More Info<strong>click here</strong></a>')
Si está convirtiendo un conjunto de nodos en una cadena, utilice el siguiente formato:
>>val.xpath('//a//text()').extract()
Mostrará el elemento como -
[u'More Info',u'click here']
y
>>val.xpath("string('//a[1]//text())").extract()
Resulta el elemento como -
[u'More Info']
Diferencia entre // nodo [1] y (// nodo) [1]
los //node[1]muestra todos los primeros elementos definidos bajo los padres respectivos. los(//node)[1] muestra solo el primer elemento del documento.
Por ejemplo
from scrapy import Selector
val = Selector(text = """
<ul class = "list">
<li>one</li>
<li>one</li>
<li>one</li>
</ul>
<ul class = "list">
<li>four</li>
<li>five</li>
<li>six</li>
</ul>""")
res = lambda x: val.xpath(x).extract()
La siguiente línea muestra todos los primeros li elementos definidos bajo sus respectivos padres -
>>res("//li[1]")
Mostrará el resultado como -
[u'<li>one</li>', u'<li>four</li>']
Puedes conseguir el primero li elemento del documento completo que se muestra a continuación:
>>res("(//li)[1]")
Mostrará el resultado como -
[u'<li>one</li>']
También puede mostrar todos los primeros li elementos definidos bajo ul padre -
>>res("//ul//li[1]")
Mostrará el resultado como -
[u'<li>one</li>', u'<li>four</li>']
Puedes conseguir el primero li elemento definido bajo ul padre en todo el documento que se muestra a continuación:
>>res("(//ul//li)[1]")
Mostrará el resultado como -
[u'<li>one</li>']
Referencia de selectores incorporados
Los selectores incorporados incluyen la siguiente clase:
class scrapy.selector.Selector(response = None, text = None, type = None)
La clase anterior contiene los siguientes parámetros:
response - Es una HTMLResponse y XMLResponse que selecciona y extrae los datos.
text - Codifica todos los caracteres utilizando la codificación de caracteres UTF-8, cuando no hay respuesta disponible.
type- Especifica los diferentes tipos de selector, como html para HTML Response, xml para XMLResponse y none para el tipo predeterminado. Selecciona el tipo en función del tipo de respuesta o lo establece en html de forma predeterminada, si se usa con el texto.
Los selectores incorporados contienen los siguientes métodos:
No Señor | Método y descripción |
---|---|
1 | xpath(query) Coincide con los nodos de acuerdo con la consulta xpath y proporciona los resultados como instancia de SelectorList. La consulta de parámetros especifica la consulta XPATH que se utilizará. |
2 | css(query) Proporciona el selector de CSS y devuelve la instancia de SelectorList. La consulta de parámetros especifica el selector de CSS que se utilizará. |
3 | extract() Muestra todos los nodos coincidentes como una lista de cadenas Unicode. |
4 | re(regex) Proporciona la expresión regular y muestra los nodos coincidentes como una lista de cadenas Unicode. El parámetro regex se puede usar como una expresión regular o cadena, que se compila en una expresión regular usando el método re.compile (regex). |
5 | register_namespace(prefix, uri) Especifica el espacio de nombres utilizado en el selector. No puede extraer los datos sin registrar el espacio de nombres del espacio de nombres no estándar. |
6 | remove_namespaces() Descarta el espacio de nombres y da permiso para atravesar el documento utilizando xpaths sin espacio de nombres. |
7 | __nonzero__() Si se selecciona el contenido, este método devuelve verdadero; de lo contrario, devuelve falso. |
Objetos SelectorList
class scrapy.selector.SelectorList
Los objetos SelectorList contienen los siguientes métodos:
No Señor | Método y descripción |
---|---|
1 | xpath(query) Utiliza el método .xpath () para los elementos y proporciona los resultados como instancia de SelectorList. La consulta de parámetros especifica los argumentos definidos en el método Selector.xpath (). |
2 | css(query) Utiliza el método .css () para los elementos y devuelve los resultados como una instancia de SelectorList. La consulta de parámetros especifica los argumentos definidos en el método Selector.css (). |
3 | extract() Saca todos los elementos de la lista utilizando el método .extract () y devuelve el resultado como una lista de cadenas Unicode. |
4 | re() Utiliza el método .re () para los elementos y resalta los elementos como una lista de cadenas Unicode. |
5 | __nonzero__() Si la lista no está vacía, este método devuelve verdadero; de lo contrario, devuelve falso. |
Los objetos SelectorList contienen algunos de los conceptos que se explican en este enlace .