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()')) #多属性匹配

浙公网安备 33010602011771号