xpath语法以及解析库lxml库使用方法

文章介绍了Python的lxml库和XPath语言在HTML和XML解析中的应用。XPath用于定位文档中的特定元素,如选取特定节点、含有指定值的节点等。lxml库提供了高效的方式处理HTML和XML数据,包括自动修正HTML代码并提取所需信息。
摘要由CSDN通过智能技术生成

一、python解析库xpath

为什么要学习XPATH和LXML类库?
lxml是⼀款⾼性能的Python HTML/XML解析器,我们可以利⽤Xpath来快速的定位特定元素以及获取节点信息。
什么是XPATH?
什么是XPATH?
Xpath是⼀⻔在HTML/XML⽂档中查找信息的语⾔,可⽤来在HTML/XML⽂档中对元素和属性进⾏遍历。
⽂档:xpath教程

1、认识XML

数据格式描述设计⽬标
XML可扩展标记语⾔被设计为传输和存储数据,其焦点是数据的内容
HTML超⽂本标记语⾔显示数据以及如何更好显示

2、XML的节点关系

节点的概念:每个XML的标签我们都称之为节点

二、节点选择语法

XPath使⽤路径表达式来选取XML⽂档中的节点或者节点集。这些路径表达式和我们在常规的电脑⽂件系统中看到的表达式⾮常相似。

表达式描述
/从根节点选取
//从匹配选择的当前节点选择⽂档中的节点,⽽不考虑它们的位置
.选取当前节点
选取当前节点的⽗节点
@选取

查找某个特定的节点或者包含某个指定的值的节点

路径表达式结果
/bookstore/book[1]选取属于 bookstore ⼦元素的第⼀个book元素。
/bookstore/book[last()]选取属于 bookstore ⼦元素的最后⼀个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore ⼦元素的倒数第⼆个 book 元素。
/bookstore/book[position()❤️]选取最前⾯的两个属于 bookstore 元素的⼦元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的
//title[@lang=‘eng’]选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book元素,且其中的 price 元素的值须⼤于 35.00。

选择未知节点

XPath 通配符可⽤来选取未知的 XML 元素。

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。
列出了⼀些路径表达式,以及这些表达式的结果
路径表达式结果
/bookstore/*选取 bookstore 元素的所有⼦元素。
//*选取⽂档中的所有元素。
html/node()/meta/@*选择html下⾯任意节点下的meta节点的所有属性
//title[@*]选取所有带有属性的 title 元素。
xpath的更多语法:xpath更多语法

三、lxml库

  • lxml 是 ⼀个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML 数据。
  • 利⽤etree.HTML,将字符串转化为Element对象
  • lxml python 官⽅⽂档:https://lxml.de/index.html
  • 可使⽤ pip 安装:pip install lxml (或通过wheel⽅式安装)
  • lxml 可以⾃动修正 html 代码

xpath语法练习

from lxml import etree
# lxml 可以自动修正HTML代码
text = """
<div>  
    <ul>    
        <li>      
            <strong>one</strong>    
        <li class='item-1'>
            <a href="http://fenqi.renren.com/" target="_blank">two</a>    
        </li>    
        <li>      
            <a href="https://licai.renren.com/" target="_blank">three</a>    
        </li>    
        <li>      
            <a href="http://www.woxiu.com/" target="_blank">five</a>    
        </li>    
        <li>      
            <a href="http://zhibo.renren.com/" target="_blank">six</a>    
        </li>     
        <li class='item-1'>      
            <a href="http://www.renren.com/" target="_blank">serven</a>    
        </li>   
        <li class='item-1'>      
            <a href="https://www.kaixin.com" target="_blank">eight
        </li>  
        </ul>
"""
# 将字符串转化为Element对象
html = etree.HTML(text)
# 查看Element对象中包含的字符串
print(etree.tostring(html).decode())
# class=item-1的li标签下的a标签的href
ret = html.xpath("//li[@class='item-1']/a/@href")
print(ret)
# class=item-1的li标签下的a标签的文本
ret1 = html.xpath("//li[@class='item-1']/a/text()")
print(ret1)
# {herf:http://fenqi.renren.com/, title:two}
for href in ret:    
    item = {}    
    item['href'] = href    
    item['title'] = ret1[ret.index(href)]    
    print(item)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值