O XPath (XML Path Language) é uma linguagem de consulta projetada para navegar em documentos XML e HTML, permitindo localizar e extrair elementos, atributos e conteúdos de texto com alta precisão.
Fundamentos da Sintaxe XPath
O XPath trata documentos como uma árvore de nós. A navegação é realizada através de caminhos que descrevem a hierarquia do documento.
nodename: Seleciona todos os nós filhos do nó especificado./: Inicia a seleção a partir da raiz ou seleciona nós filhos imediatos.//: Busca nós em qualquer nível do documento (descendentes), ignorando a hierarquia direta.@: Utilizado para acessar atributos de um elemento..: Refere-se ao nó atual...: Seleciona o nó pai do elemento atual.
Filtragem com Predicados
Os predicados, definidos entre colchetes [], filtram a seleção com base em critérios específicos:
//item[1]: Seleciona o primeiro elementoitem.//item[last()]: Seleciona o último elementoitem.//item[@id='target']: Seleciona elementos com um atributo id específico.//item[price > 50]: Filtra elementos cujo valor numérico interno supera 50.
Funções e Operadores Úteis
contains(@atributo, 'valor'): Verifica se um atributo contém determinada substring.text(): Extrai o conteúdo textual de um nó.|: Operador de união para selecionar múltiplos caminhos simultaneamente (ex://h1 | //h2).
Manipulação com lxml
A biblioteca lxml é uma das ferramentsa mais eficientes em Python para parseamento de documentos HTML/XML. Ela é capaz de corrigir automaticamente estruturas de marcação malformadas.
Exemplo de Implementação
from lxml import etree
html_content = """
<ul class="products">
<li class="item"><a href="/prod/1">Notebook</a></li>
<li class="item"><a href="/prod/2">Smartphone</a></li>
</ul>
"""
# Converter string para objeto analisável
parser = etree.HTML(html_content)
# Extração usando XPath
links = parser.xpath('//li[@class="item"]/a/@href')
names = parser.xpath('//li[@class="item"]/a/text()')
for link, name in zip(links, names):
print(f"Produto: {name} | Link: {link}")
Para processar arquivos externos diretametne, utiliza-se a função etree.parse():
# Carregando um arquivo local
doc = etree.parse('documento.html')
resultados = doc.xpath('//div[contains(@class, "container")]//span/text()')
print(resultados)
A utilização do etree.tostring() é recomendada durante a depuração para visualizar como o lxml reconstruiu ou estruturou o HTML após a leitura, garantindo que o XPath aplicado corresponda ao modelo de árvore real processado pelo interpretador.