lxml读取xml_爬虫解析库——XPath语法和lxml库

XPath

XPath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历。

XPath开发工具:Chrome插件XPath Helper、Firefox插件Try XPath

XPath节点:元素、属性、文本、命名空间、处理指令、注释、文档(根)节点。XML文档是被作为节点树来对待的,树的根被称为文档节点或者根节点。

XPath语法:XPath使用路径表达式来选取XML文档中的节点或节点集

d1d4cb4dba10834ffe06b1549c89c2c0.png

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

afaca7468094f17289ab0e37e5377ff1.png

*代表通配符

6157b18d80943dd52a8033f17f29e3a4.png

选取多个路径:通过在路径表达式中使用"|"运算符

contains:有时候某个属性中包含了多个值,可以使用contains函数

lxml库

pip install lxml

lxml是一个HTML/XML解析器,主要功能是如何解析和提取HTML/XML。在解析HTML代码时候,如果HTML代码不规范,他会自动进行补全。

from lxml import etree

text='''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">第一个</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0"><a href="link5.html">a属性</a>
     </ul>
 </div>
'''
html = etree.HTML(text)    # 将字符串的文件解析为html文档,生成一个XPath解析对象
result = etree.tostring(html)    # 按字符串序列化html文档,html文档为字节类型,解析对象输出代码
# result = etree.tostring(html).decode('utf-8')    # html文档为字符类型,进行解码
# 自动补全html文档
print(result)

从文件中读取html代码

from lxml import etree

html = etree.parse('hello.html')     # 读取外部文件hello.html
result = etree.tostring(html,pretty_print=True).decode('utf-8')
print(result)

在lxml中使用XPath语法

# html文件
<html>
<body>
<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"><span class="bold">third item</span></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>
</body>
</html>



from lxml import etree

html = etree.parse('hello.html')
# 获取所有li标签
result = html.xpath('//li')
print(result)   # 得到列表 [<Element li at 0x29bc2c8>, <Element li at 0x29bc508>, <Element li at 0x29bc548>, <Element li at 0x29bc588>, <Element li at 0x29bc608>]
for i in result:     # 按字符串序列化
    print(etree.tostring(i).decode('utf8'))
# 获取所有li标签元素下的所有class属性的值
result = html.xpath('//li/@class')
print(result)
# 获取li标签下href为www.baidu.com的a标签
result = html.xpath('//li/a[@href="www.baidu.com"]')
print(result)    # 输出为空,没有找到内容
# 获取li标签下的所有span标签
result = html.xpath('//li//span')
print(result)
# 获取li标签下的a标签里所有的class
result = html.xpath('//li/a//@class')
print(result)
# 获取最后一个li的a的href属性对应的值
result = html.xpath('//li[last()]/a/@href')
print(result)
# 获取倒数第二个li元素的内容
result = html.xpath('//li[last()-1]/a')
print(result)
print(result[0].text)    # 列表获取内容
# 获取倒数第二个li元素的内容的第二种方式
result = html.xpath('//li[last()-1]/a/text()')
print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值