2020.2.26 xpath学习笔记

XPath是XML文档的路径语言,是一种从XML中查询某信息位置的语言。

             轴描述和对应的简略写法

轴描述 名称 说明 简略写法
child 子节点 比自身节点深度大一层的节点,包括自身的节点  
attribute 属性   @
descendant 子孙节点 比自身节点深度大的节点,包括自身的节点  
descendant-or-self 自身引用及子孙节点   //
following   下文节点 按纵轴视图,在此节点后的所有完整节点,即不包含其祖先节点  
preceding 前文节点  按纵轴视图,在此节点前的所有完整节点,即不包含其子孙节点  
following-sibling 下一个同级节点    
preceding-sibling 上一个同级节点    
self 自己   .
namespace 名称空间    
parent 父节点 比自身节点深度小一层的节点,包括自身节点 ..
ancestor 祖先节点 比自身节点深度小的节点,包括自身的节点  
ancestor-or-self 自身引用及祖先节点    

 

 1 from lxml import etree   #导入lxml库的etree模块
 2 text = '''
 3 <div>
 4     <ul>
 5          <li class="item-0"><a href="link1.html">first item</a></li>
 6          <li class="item-1"><a href="link2.html">second item</a></li>
 7          <li class="item-inactive" name="item"><a href="link3.html">third item</a></li>
 8          <li class="item-1"><a href="link4.html">fourth item</a></li>
 9          <li class="item-0"><a href="link5.html">fifth item</a>
10      </ul>
11  </div>
12 '''             #申明一段Html文本(文本中最后一个 li 节点是没有闭合的
13 html = etree.HTML(text)     #对文本进行HTML类的初始化--->得到一个 XPath 解析对象
14 #result = etree.tostring(html)   #将html类型转换为 bytes 类型
15 #print(html)         #输出为: <Element html at 0x10b0b6e10>
16 #print(result.decode('utf-8'))       #利用 decode 方法转换成 str 类型
17 
18 #print(html.xpath('//*'))            #选取所有节点
19 
20 #print(html.xpath('//li'))           #选取所有li节点
21 
22 #print(html.xpath('//li/a'))         #选取所有li节点中的所有直接a节点
23 
24 #print(html.xpath('//a[@href="link1.html"]/../@class'))      #先选取所有a节点,在再其中href属性为link1.html的节点,然后获取它的父节点,最后获取它的clss的属性
25 
26 #print(html.xpath('//li[@class="item-0"]/text()'))       #---->【'\n      ']
27 #print(html.xpath('//li[@class="item-0"]/a/text()'))     #选取节点中的文本---->['first item', 'fifth item']
28 #print(html.xpath('//li[@class="item-0"]//text()'))         #---->['first item', 'fifth item', '\n     ']
29 
30 #print(html.xpath('//li[contains(@class,"item-0")]/a/text()'))       #contains(属性名称,属性值)   (多用于某个属性有多个值的情况)
31 
32 #print(html.xpath('//li[contains(@class,"item-inactive") and @name="item"]/a/text()'))       #多属性匹配

 

posted @ 2020-05-26 16:03  /章鱼哥  阅读(110)  评论(0)    收藏  举报