Maison >développement back-end >Tutoriel Python >Compréhension complète de la bibliothèque d'analyse XML du robot d'exploration Python

Compréhension complète de la bibliothèque d'analyse XML du robot d'exploration Python

黄舟
黄舟original
2017-08-08 11:33:081657parcourir

L'éditeur suivant vous proposera un article sur la bibliothèque d'analyse xlml du robot d'exploration Python (compréhension complète). L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur pour jeter un œil

1.Xpath

Parcourez les éléments et les attributs dans les documents XML. XQuery et xpoint sont tous deux construits sur l'expression XPath

2 Noeud

parent, enfant, frère (frère), ancêtre (ancêtre), descendant (Dcendant)

3. Sélectionnez le nœud

Expression du chemin

表达式 描述 路径表达式 结果
nodename 选取此节点上的所有的子节点 bookstore 选取bookstore元素的所有子节点
/ 从根节点上选取 /bookstore 选取根元素bookstore,为绝对路径
// 从匹配选择的当前节点选择文档中的节点,不考虑位置 //book 选取所有的book子元素,而不管他们在文档的位置
. 选取当前节点 bookstore//book 选择bookstore后代中所有的book元素
.. 选取当前节点的父节点

@ 选取属性 //@lang 选取名为lang的所有属性

Prédicat

Le prédicat est utilisé pour trouver un nœud spécifique ou un nœud contenant une valeur spécifiée

Le prédicat est placé entre crochets

路径表达式 结果
/bookstore/book[1] 选取属于bookstore子元素的第一个book元素
/bookstore/book[last()] 选取属于bookstore子元素的最后book元素
/bookstore/book[last()-1] 选取属于bookstore子元素的倒数第二个book元素
/bookstore/book[position()08f90382772bc0c937572960a35e50ec35.0] 选取bookstore元素的所有book元素,且其中的price值大于35.0

Sélectionnez les nœuds inconnus (caractères génériques)

* Faites correspondre n'importe quel nœud d'élément

@* Faites correspondre n'importe quel nœud d'attribut

node() Correspond à tout type de nœud

Utilisation de 4.lxml


#!/usr/bin/python
#_*_coding:utf-8_*_

from lxml import etree

text='''
<p>
 <ul>
  <li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" >first item</a></li>
  <li class="item-1"><a href="link2.html" rel="external nofollow" >second item</a></li>
  <li class="item-inactive"><a href="link3.html" rel="external nofollow" >third item</a></li>
  <li class="item-1"><a href="link4.html" rel="external nofollow" >fourth item</a></li>
  <li class="item-0"><a href="link5.html" rel="external nofollow" >fifth item</a>
 </ul>
</p>
  &#39;&#39;&#39;

# html=etree.HTML(text) #html对象,存储在地址中,有自动修正功能
# result=etree.tostring(html) #将html对象转化为字符串

html=etree.parse(&#39;hello.html&#39;)
# result=etree.tostring(html,pretty_print=True)
# print result
print type(html)
result= html.xpath(&#39;//li&#39;)
print result
print len(result)
print type(result)
print type(result[0])
print html.xpath(&#39;//li/@class&#39;) # 获取li标签下的所有的class
print html.xpath(&#39;//li/a[@href="link1.html" rel="external nofollow" rel="external nofollow" ]&#39;) #获取li标签下href为link1的<a>标签
print html.xpath(&#39;//li//span&#39;) #获取li标签下所有的span标签
print html.xpath(&#39;//li[last()-1]/a&#39;)[0].text #获取倒数第二个元素的内容

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn