1. Comprender XPath
1.1 ¿Qué es XPath?
XPath es un lenguaje para buscar información en documentos XML y HTML que se puede utilizar para atravesar elementos y atributos en documentos XML y HTML.
1.2 herramientas de desarrollo XPath
complemento de Chrome XPath Helper
Complemento de Firefox Prueba XPath
1.3 nodo XPath
Hay siete tipos de nodos: elemento, atributo, texto, espacio de nombres, instrucción de procesamiento, comentario y nodo de documento (raíz).
Los documentos XML se tratan como un árbol de nodos. La raíz del árbol se denomina nodo de documento o nodo raíz.
2. Sintaxis XPath
2.1 Expresión de ruta
Utilice expresiones de ruta para seleccionar nodos o conjuntos de nodos en el documento XML.
Seleccione varias rutas con | operador
2.2 Predicado
El predicado se usa para encontrar un nodo específico o un nodo que contiene un valor específico. Está incluido entre corchetes [] . Tenga en cuenta que el número de secuencia en [] comienza desde 1.
2.3 comodín
* Significa comodín
2.4 Operador
3. Biblioteca LXML
lxml es un analizador HTML / XML cuya función principal es cómo analizar y extraer datos HTML / XML.
3.1 Uso básico
3.1.1 Analizar el código
from lxml import etree
text = '''
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
#将字符串解析未html文档
html = etree.HTML(text)
print(html)
#字符串序列化html
result = etree.tostring(html).decode('utf-8')
print(result)
3.1.2 Lea el código HTML del archivo:
from lxml import etree
#读取
html2 = etree.parse('text.html')
result2 = etree.tostring(html2).decode('utf-8')
print(result2)
Cuando use parse para leer archivos HTML, preste atención a la integridad de las etiquetas en el archivo html; de lo contrario, se informará un error.
3.2 Utilice la sintaxis XPath en lxml
from lxml import etree
html = etree.parse('text.html')
#获取所有li
result1 = html.xpath('//li')
# print(result)
for i in result1:
print(etree.tostring(i).decode('utf-8'))
# 获取所有li元素下所有class 属性值
result2 = html.xpath('//li/@class')
print(result2)
# 获取所有li元素下href = "www.baidu.com"的a
result3 = html.xpath('//li/a[@href="www.baidu.com"]')
print(result3)
# 获取所有li元素下span标签 用//
result4 = html.xpath('//li//span')
print(result4)
# 获取所有li元素下a标签的所有class
result5 = html.xpath('//li/a//@class')
print(result5)
# 获取最后一个li元素下a标签的href对应的值
result6 = html.xpath('//li[last()]/a/@href')
print(result6)
# 获取最后二个li元素下内容
result7 = html.xpath('//li[last()-1]/a')
print(result7)
print(result7[0].text)
# 获取最后二个li元素下内容 第二种方式
result7 = html.xpath('//li[last()-1]/a/text()')
print(result7)
# print(result7[0].text)