Aprendizado do rastreador Python 27
Continue aprendendo Xpath hoje
Continuação do artigo anterior
contente
5. O segundo uso do Xpath
Se você não estiver familiarizado, por favor, anexe as regras primeiro:
5-5 Nós filhos
Use / ou // para encontrar os nós filhos de um elemento.
from lxml import etree
html = etree.parse('./text.html', etree.HTMLParser())
# 检索所有li节点下的a节点
result = html.xpath('//li/a')
print(result)
resultado da operação:
Obviamente, o exemplo acima é encontrar os nós filhos diretos em um nó específico. Para encontrar todos os nós filhos dentro de um nó:
from lxml import etree
html = etree.parse('./text.html', etree.HTMLParser())
result = html.xpath('//ul//a')
print(result)
resultado da operação:
Claro, o resultado é o mesmo para o html que selecionamos, e os significados expressos pelos dois métodos acima eram completamente diferentes naquele momento.
Em seguida, por favor, pense, se escrevermos o Xpath da seguinte forma, quais resultados serão correspondidos?
'//ul/a'
from lxml import etree
html = etree.parse('./text.html', etree.HTMLParser())
result = html.xpath('//ul/a')
print(result)
Para a linguagem Xpath, a / representa o nó direto a sob o nó ul, então o resultado é claro:
5-6 Nó pai
Sabendo como consultar nós filhos e nós descendentes, como consultar nós pais?
Desta vez mudei um pedaço de html, por exemplo, queremos encontrar o nó div aqui
Se o nó h1 cujo atributo de classe é baikeLogo for selecionado e quisermos obter o atributo id de seu nó pai, podemos fazer isso:
from lxml import etree
html = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//h1[@class="baikeLogo"]/../@id')
print(result)
resultado da operação:
Você também pode obter o nó pai por meio de pai:::
# parent::
from lxml import etree
html = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//h1[@class="baikeLogo"]/parent::*/@id')
print(result)
resultado da operação:
5-7 Correspondência de Atributos
Para combinar um nó com um atributo específico, você precisa usar @, que vimos no caso anterior:
Por exemplo, queremos combinar todos os nós li com o atributo de classe li aqui:
# 属性匹配
from lxml import etree
html = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//li[@class="li"]')
print(result)
Resultados em execução: na captura de tela, podemos ver que deve haver 3 resultados correspondentes e também há três resultados em execução
Então a questão é: as três coisas devolvidas a nós são as três que queremos?
É isso por hoje, vamos vendê-lo primeiro. . .