Python3 [Bibliothèque d'analyse XPath]

1. Introduction à XPath

  Pour analyser la relation hiérarchique des pages Web, la fonction de sélection de XPath est très puissante, elle fournit une expression de sélection de chemin très simple et claire.

En outre, il fournit également plus de 100 fonctions intégrées pour la correspondance de chaînes, numériques et temporelles, ainsi que le traitement des nœuds et des séquences.

Presque tous les nœuds de positionnement peuvent être sélectionnés à l'aide de XPath.

Site officiel: https://www.w3.org/TR/xpath

 

1. Règles communes XPath:

                             

 

2. Utilisation de base

depuis 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.Le code HTML (texte) 

# Le complément complet de la structure de la page Web, le fichier chemin ouvert 
# HTML etree.parse = ( 'demo.html', etree.HTMLParser ()) 

Imprimer (HTML) 

# convertir la page en type de texte, sous forme d' octets
= Résultat etree.tostring (HTML) 

# dans str type 
Résultat = result.decode ( " UTF-. 8 " ) 

Imprimer (Résultat)

1. Sélection de correspondance (tous les nœuds)

depuis 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.Le code HTML (texte) 

# sélectionné correspondant contenu 
Résultat = html.xpath ( ' // * ' ) 

Imprimer (Résultat)

 

 

 

2. Noeuds enfants

depuis 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.Le code HTML (texte) 

# sélectionné correspondant contenu 
Résultat = html.xpath ( ' // Li / A ' ) 

Imprimer (Résultat)

Ici "/" représente les nœuds enfants directs, "//" représente tous les nœuds descendants

 

 

 3. Noeud parent

Noeud parent: utilisez " .. ", vous pouvez également utiliser parent :: pour représenter le parent

depuis 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.Le code HTML (texte) 

# sélectionné correspondant contenu 
# attribut est une balise d'attribut de classe parente link4 
Résultat = html.xpath ( « //a[@href="link4"]/../@class » ) 

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

print (result)
 print (result1)

 

 

 

4. Acquisition de texte

depuis 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.Le code HTML (texte) 

# correspondant contenu sélectionné 
# attribut est une balise attribut classe parente link4 
Résultat = html.xpath ( ' // un [@ href = "link4"] / texte () ' ) 

Imprimer(résultat)

 

 

5. Correspondance multi-valeurs d'attribut

depuis 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"> < un href = "link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</div> 

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

# correspondant contenu sélectionné 
# le contient (@ propriété, valeur) 
Résultat = html.xpath ( ' // Li [le contient (@class, "Trois")] / A / text () ' )

imprimer (résultat)

 

6. Correspondance multi-attributs

 Plusieurs attributs déterminent un nœud, puis vous devez faire correspondre plusieurs attributs

depuis 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 = "four"> <a href="link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</ div > 

'' '
# Convertis type de page de texte et fixer le complément 
HTML = etree.HTML (texte) 

# correspondant contenu sélectionné 
# le contient (@ propriété, valeur) 
Résultat = html.xpath ( ' // Li [le contient (@class, « Trois ") et @ name =" item "] / a / text ()' ) 

print (résultat)

 

7. Choisissez dans l'ordre

depuis 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 = "four"> <a href="link4"> 4 </a> </li> 
        <li class = "five"> <a href="link5"> 5 </a> 
    </ul> 
</ div > 

'' '
# Convertis type de page de texte et fixer le complément 
HTML = etree.HTML (texte) 

# sélectionné correspondant contenu 

# premier match Li 
RESULT1 = html.xpath ( ' // Li [. 1] / A / text () ' ) 

#Enfin, un compte à rebours 2 
result2 = html.xpath ( ' // Li [Last () - 2] / A / texte () ' ) 

# dernière 
result3 = html.xpath ( ' // Li [Dernière ()] / A / texte () ' ) 

# . moins de 3 
result4 = html.xpath ( ' // Li [ la position () <3.] / A / texte () ' ) 


# fonctions intégrées 100, http: //www.w3school.com.cn/ xpath / xpath_functions.asp 
print (result1)
 print (result2)
 print (result3)
 print (result4)

 

 

8. Sélection de l'axe des nœuds

 

 

 

 

# Attribut d'un attribut de classe parent link4 tag

Je suppose que tu aimes

Origine www.cnblogs.com/Crown-V/p/12725652.html
conseillé
Classement