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 .