xPath 与 lxml

一、XPath 概览

  • xpath 是一门在xml 文档中查找信息的语言。xpath 用于在xml 文档中通过元素和属性进行导航
    提供了简洁明了的路径选择表达器。几乎所有我们想要定位的节点,都可以用xpath

二、xpath常用规则

                         常用的路径表达式
表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选择属性
路径表达式 结果
bookstore 选取bookstore 元素的所有子节点
/bookstore 选取根元素 bookstore。 注:假如路径起始于正斜杠(/),则路径代表到某元素的绝对路径
bookstore/book 选取属于 bookstore 的子元素所有 book 元素
//book 选取所有 book 子元素,而不管他们在文档中的位置
bookstore//book 选择属于bookstore 元素后代的所有 book 元素,而不管他位于bookstore哪里
//@lang 选取名为 lang 的属性

三、lxml 安装

安装 pip install lxml

实例:

from lxml import etree


text ='''
<div>
     <ul>
         <li class="item-0"><a href="#">first item</a></li>
        <li class="item-1"><a href="#">second item</a></li>
        <li class="item-2"><a href="#">third item</a></li>
     </ul>
</div>
'''
html = etree.HTML(text)
result = etree.tostring(html)

四、所有节点

from lxml  import etree


html = etree.parse('demo.html',etree.HTMLParsesr())

#这里的*代表所有节点,也是整个HTML文本中的所有元素节点都会被捕获,返回的是一个list
result = html.xpath('//*')

print(result)

五、子节点
我们通过 / 或 // 即可查找元素的子节点或子孙节点

from lxml  import etree


html = etree.parse('demo.html',etree.HTMLParsesr())
result = html.xpath('//li/a')
print(result)

六、父节点
用 .. 来实现

from lxml  import etree


html = etree.parse('demo.html',etree.HTMLParsesr())
result = html.xpath('//a[@href="demo.html"]/../@class')
print(result)

或者 parent::

from lxml  import etree


html = etree.parse('demo.html',etree.HTMLParsesr())
result = html.xpath('//a[@href="demo.html"]/parent::*/@class')
print(result)

七、文本获取

text() 方法获取节点中的文本


from lxml  import etree


html = etree.parse('demo.html',etree.HTMLParsesr())
result = html.xpath('//li[@class="item-0"]/text()')
print(result)

八、属性获取

@ 符号获取

from lxml  import etree


html = etree.parse('demo.html',etree.HTMLParsesr())
result = html.xpath('//li/a@href')
print(result)