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 .