Python3 [Biblioteca de análisis XPath]

1. Introducción a XPath

  Para analizar la relación jerárquica de las páginas web, la función de selección de XPath es muy poderosa, proporciona una expresión de selección de ruta muy simple y clara.

Además, también proporciona más de 100 funciones integradas para la coincidencia de cadenas, números y tiempos, así como el procesamiento de nodos y secuencias.

Casi todos los nodos de posicionamiento se pueden seleccionar usando XPath.

Sitio web oficial: https://www.w3.org/TR/xpath

 

1. Reglas comunes de XPath:

                             

 

2. Uso básico

from lxml import etree 

text = '' ' 
<div> 
    <ul> 
        <li class = "one"> <a href="link1"> 1 </a> </li> 
        <li class = "two"> <a href = "link2"> 2 </a> </li> 
        <li class = "three"> <a href="link3"> 3 </a> </li> 
        <li class = "four"> <a href = "link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</div> 

'' ' 
# 将 文本转换 为 网页 类型 , 并 修复 补 全 
html = etree.El HTML (texto) 

# todo el complemento de la estructura de la página web, el archivo de trazado abierto 
# HTML etree.parse = ( 'demo.html', etree.HTMLParser ()) 

Imprimir (HTML) 

# convertir la página en el tipo de texto, como bytes
= Resultado etree.tostring (HTML) 

# en str Tipo 
Resultado = result.decode ( " UTF-8. " ) 

Imprimir (Resultado)

1. Selección de coincidencias (todos los nodos)

from lxml import etree 


text = '' ' 
<div> 
    <ul> 
        <li class = "one"> <a href="link1"> 1 </a> </li> 
        <li class = "two"> <a href = "link2"> 2 </a> </li> 
        <li class = "three"> <a href="link3"> 3 </a> </li> 
        <li class = "four"> <a href = "link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</div> 

'' ' 
# 将 文本转换 为 网页 类型 , 并 修复 补 全 
html = etree.El HTML (texto) 

# seleccionada coincidencia de contenidos 
Resultado = html.xpath ( ' // * ' ) 

Imprimir (Resultado)

 

 

 

2. Nodos hijos

from lxml import etree 


text = '' ' 
<div> 
    <ul> 
        <li class = "one"> <a href="link1"> 1 </a> </li> 
        <li class = "two"> <a href = "link2"> 2 </a> </li> 
        <li class = "three"> <a href="link3"> 3 </a> </li> 
        <li class = "four"> <a href = "link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</div> 

'' ' 
# 将 文本转换 为 网页 类型 , 并 修复 补 全 
html = etree.El HTML (texto) 

# seleccionada coincidencia de contenidos 
Resultado = html.xpath ( ' // Li / A ' ) 

Imprimir (Resultado)

Aquí "/" representa nodos secundarios directos, "//" representa todos los nodos descendientes

 

 

 3. nodo principal

Nodo padre: use " .. ", también puede usar parent :: para representar el padre

from lxml import etree 


text = '' ' 
<div> 
    <ul> 
        <li class = "one"> <a href="link1"> 1 </a> </li> 
        <li class = "two"> <a href = "link2"> 2 </a> </li> 
        <li class = "three"> <a href="link3"> 3 </a> </li> 
        <li class = "four"> <a href = "link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</div> 

'' ' 
# 将 文本转换 为 网页 类型 , 并 修复 补 全 
html = etree.El HTML (texto) 

# contenido coincidente seleccionada 
# atributo es un identificador de atributo de la clase padre link4 
Resultado = html.xpath ( ' //a[@href="link4"]/../@class ' ) 

#@ 表示 属性 
resultado1 = html.xpath ( ' // a [@ href = "link4"] / parent :: * / @ class ' ) 

print (resultado)
 print (resultado1)

 

 

 

4. Adquisición de texto

from lxml import etree 


text = '' ' 
<div> 
    <ul> 
        <li class = "one"> <a href="link1"> 1 </a> </li> 
        <li class = "two"> <a href = "link2"> 2 </a> </li> 
        <li class = "three"> <a href="link3"> 3 </a> </li> 
        <li class = "four"> <a href = "link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</div> 

'' ' 
# 将 文本转换 为 网页 类型 , 并 修复 补 全 
html = etree.El HTML (texto) 

# seleccionada contenido coincidente 
# atributo es una clase padre atributo de etiqueta link4 
Resultado = html.xpath ( ' // a [@ el href = "link4"] / texto () ' ) 

Imprimir(resultado)

 

 

5. Atributo de coincidencia de valores múltiples

from lxml import etree 


text = '' ' 
<div> 
    <ul> 
        <li class = "one"> <a href="link1"> 1 </a> </li> 
        <li class = "two"> <a href = "link2"> 2 </a> </li> 
        <li class = "three two"> <a href="link3"> 3 </a> </li> 
        <li class = "four"> < a href = "link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</div> 

'' ' 
# 将文本 转换 为 网页 类型 , 并 修复 补 全 
html = etree.El HTML (texto) 

# coincidencia de contenido seleccionado 
# la contiene (@ propiedad, valor) 
Resultado = html.xpath ( ' // Li [la contiene (@class, "Tres")] / A / texto () ' )

imprimir (resultado)

 

6. Coincidencia de atributos múltiples

 Múltiples atributos determinan un nodo, entonces necesita hacer coincidir múltiples atributos

from lxml import etree 


text = '' ' 
<div> 
    <ul> 
        <li class = "one"> <a href="link1"> 1 </a> </li> 
        <li class = "two three" name = "item"> <a href="link2"> 2 </a> </li> 
        <li class = "three two"> <a href="link3"> 3 </a> </li> 
        <li class = "cuatro"> <a href="link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</ div > 

'' '
# Convierte el texto tipo de página, y fijar el complemento 
HTML = etree.HTML (texto) 

# seleccionada contenido coincidente 
# la contiene (@ propiedad, valor) 
Resultado = html.xpath ( ' // Li [la contiene (@class, "Tres ") y @ name =" item "] / a / text ()' ) 

imprimir (resultado)

 

7. Elija en orden

from lxml import etree 


text = '' ' 
<div> 
    <ul> 
        <li class = "one"> <a href="link1"> 1 </a> </li> 
        <li class = "two three" name = "item"> <a href="link2"> 2 </a> </li> 
        <li class = "three two"> <a href="link3"> 3 </a> </li> 
        <li class = "cuatro"> <a href="link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</ div > 

'' '
# Convierte el texto tipo de página, y fijar el complemento 
HTML = etree.HTML (texto) 

# seleccionado contenido coincidente 

# primer partido Li 
RESULT1 = html.xpath ( ' // Li [. 1] / A / texto () ' ) 

#Por último, una cuenta atrás 2 
result2 = html.xpath ( ' // Li [Ultima () - 2] / A / texto () ' ) 

# última 
result3 = html.xpath ( ' // Li [Ultima ()] / A / texto () ' ) 

# . menos de 3 
result4 = html.xpath ( ' // Li [posición () <3.] / a / texto () ' ) 


# funciones integradas 100, http: //www.w3school.com.cn/ xpath / xpath_functions.asp 
print (resultado1)
 print (resultado2)
 print (resultado3)
 print (resultado4)

 

 

8. Selección del eje del nodo

 

 

 

 

# Atributo de un atributo de clase padre etiqueta link4

Supongo que te gusta

Origin www.cnblogs.com/Crown-V/p/12725652.html
Recomendado
Clasificación