Scrapy - Dicas Xpath

Usando Nós de Texto em uma Condição

Quando você estiver usando nós de texto em uma função de string XPath, use .(dot) ao invés de usar .//text(), porque isso produz a coleção de elementos de texto chamados como node-set.

Por exemplo -

from scrapy import Selector
val = Selector(text = '<a href = "#">More Info<strong>click here</strong></a>')

Se você estiver convertendo um conjunto de nós em uma string, use o seguinte formato -

>>val.xpath('//a//text()').extract()

Ele exibirá o elemento como -

[u'More Info',u'click here']

e

>>val.xpath("string('//a[1]//text())").extract()

Isso resulta no elemento como -

[u'More Info']

Diferença entre // nó [1] e (// nó) [1]

o //node[1]exibe todos os primeiros elementos definidos nos respectivos pais. o(//node)[1] exibe apenas o primeiro elemento do documento.

Por exemplo -

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()

A linha a seguir exibe todos os primeiros li elementos definidos em seus respectivos pais -

>>res("//li[1]")

Ele exibirá o resultado como -

[u'<li>one</li>', u'<li>four</li>']

Você pode pegar o primeiro li elemento do documento completo mostrado a seguir -

>>res("(//li)[1]")

Ele exibirá o resultado como -

[u'<li>one</li>']

Você também pode exibir todos os primeiros li elementos definidos em ul pai -

>>res("//ul//li[1]")

Ele exibirá o resultado como -

[u'<li>one</li>', u'<li>four</li>']

Você pode pegar o primeiro li elemento definido em ul pai em todo o documento mostrado a seguir -

>>res("(//ul//li)[1]")

Ele exibirá o resultado como -

[u'<li>one</li>']

Referência de seletores integrados

Os seletores integrados incluem a seguinte classe -

class scrapy.selector.Selector(response = None, text = None, type = None)

A classe acima contém os seguintes parâmetros -

  • response - É um HTMLResponse e XMLResponse que seleciona e extrai os dados.

  • text - Codifica todos os caracteres usando a codificação de caracteres UTF-8, quando não há resposta disponível.

  • type- Ele especifica os diferentes tipos de seletor, como html para HTML Response, xml para XMLResponse type e nenhum para o tipo default. Ele seleciona o tipo dependendo do tipo de resposta ou define como html por padrão, se for usado com o texto.

Os seletores integrados contêm os seguintes métodos -

Sr. Não Método e Descrição
1

xpath(query)

Ele corresponde aos nós de acordo com a consulta xpath e fornece os resultados como uma instância SelectorList. O parâmetro query especifica a consulta XPATH a ser usada.

2

css(query)

Ele fornece o seletor CSS e retorna a instância SelectorList. O parâmetro query especifica o seletor CSS a ser usado.

3

extract()

Ele traz todos os nós correspondentes como uma lista de strings Unicode.

4

re(regex)

Ele fornece a expressão regular e exibe os nós correspondentes como uma lista de strings Unicode. O parâmetro regex pode ser usado como uma expressão regular ou string, que é compilada para uma expressão regular usando o método re.compile (regex).

5

register_namespace(prefix, uri)

Ele especifica o namespace usado no seletor. Você não pode extrair os dados sem registrar o namespace do namespace não padrão.

6

remove_namespaces()

Ele descarta o namespace e dá permissão para percorrer o documento usando os xpaths sem namespace.

7

__nonzero__()

Se o conteúdo for selecionado, este método retorna verdadeiro, caso contrário, retorna falso.

Objetos SelectorList

class scrapy.selector.SelectorList

Os objetos SelectorList contêm os seguintes métodos -

Sr. Não Método e Descrição
1

xpath(query)

Ele usa o método .xpath () para os elementos e fornece os resultados como uma instância SelectorList. A consulta de parâmetro especifica os argumentos conforme definidos no método Selector.xpath ().

2

css(query)

Ele usa o método .css () para os elementos e retorna os resultados como uma instância SelectorList. A consulta de parâmetro especifica os argumentos conforme definidos no método Selector.css ().

3

extract()

Ele traz todos os elementos da lista usando o método .extract () e retorna o resultado como uma lista de strings Unicode.

4

re()

Ele usa o método .re () para os elementos e traz os elementos como uma lista de strings Unicode.

5

__nonzero__()

Se a lista não estiver vazia, este método retorna verdadeiro; caso contrário, retorna falso.

Os objetos SelectorList contêm alguns dos conceitos conforme explicado neste link .