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.html

4,需要安装语言库,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 etree

xml_doc = etree.HTML(html) # xml

result = 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()取内容
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值