> 文章列表 > python第三方库lxml(xpath)

python第三方库lxml(xpath)

python第三方库lxml(xpath)

lxml

lxml库¶
1,lxml库是一个HTML/XML的解析器,主要功能是如何解析和提取HTML/XML数据2,lxml和正则一样,都是通过C语言实现的,它是一款高性能的Python HTML/XML的解析器,我们可以利用之前所学习的XPath语法,来快速定位特定元素以及节点信息3,lxml python 的官方文档:http://lxml.de/index.html4,需要安装语言库,pip install lxml

使用流程:

  • 导入模块:from lxml import etree
  • 创建解析对象:parse_html = etree.HTML(html)
  • 解析对象调用xpath:r_list = parse_html.xpath('xpath语法')

xpath语法

XPath中,HXML文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

表达式 描述
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
/ 如果是在最前面,表示从根节点选取。否则某节点下的某个节点
@ 选取某个节点的属性
text() 选取文本。

谓语:谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中。

表达式 描述
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。

XPath实例测试

1. 获取所有的 <li> 标签

# 例子
html = '''
<div><ul><li class="item-0"><a href="link1.html">first item</a></li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-inactive"><a href="link3.html">third item</a></li><li class="item-1"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li> </ul></div>
'''from lxml import etreexml_doc = etree.HTML(html) # xmlresult = xml_doc.xpath('//li')
print(result)
# print(type(result))
for i in result:print(i)r = etree.tostring(i)print(r)

2. 继续获取<li> 标签的所有 class属性

re = xml_doc.xpath('//li/@class')
print(re)

结果:[‘item-0’, ‘item-1’, ‘item-inactive’, ‘item-1’, ‘item-0’]

3. 获取 <li> 标签下的<a>标签里的所有 href

r = xml_doc.xpath('//a/@href')
# r = xml_doc.xpath('//div')
print(r)

结果:[‘link1.html’, ‘link2.html’, ‘link3.html’, ‘link4.html’, ‘link5.html’]

4. 继续获取<li>标签下hreflink1.html<a> 标签 的文本内容

r=xml_doc.xpath('//a[@href="link1.html"]/text()')
print(r)
# print(etree.tostring(r[0]))

结果:[‘first item’]

注意:

1,只要涉及到条件,加 []

2,只要获取属性值,加 @

3,通过text()取内容