xpath的基本使用


XPath是一门在XML文档中查找信息的语言,可以用来在XML文档对元素和属性进行遍历,而我们熟知的HTML恰好属于XML的一个子集

安装xpath

在python中想要使用xpath,需要安装lxml模块

pip install lxml

导入xpath

from lxml import etree
from lxml import html
etree=html.etree

导入的方式有两种,如果第一种报错,就使用第二种

xpath处理XML

数据准备
xmlData = """
<book>
    <id>1</id>
    <name>野花遍地香</name>
    <price>1.23</price>
    <nick>臭豆腐</nick>
    <author>
        <nick id="10086">周大强</nick>
        <nick id="10010">周芷若</nick>
        <nick class="jay">周杰伦</nick>
        <nick class="jolin">蔡依林</nick>
        <div>
            <nick>惹了</nick>
        </div>
    </author>
    <partner>
        <nick id="ppc">胖胖陈</nick>
        <nick id="ppbc">胖胖不陈</nick>
    </partner>
</book>
"""
数据解析

查找子节点

首先对字符串进行初始化

et= etree.XML(xml)

接着找到book根节点

result=et.xpath("/book")

斜杠表示的就是根节点

如果想找到book下面的name子节点,可以用下面的代码

result=et.xpath("/book/name")

中间的斜杠表示的是子节点

取节点文本

如果想要取到name里面的文本,则可以

result=et.xpath("/book/name/text()")

输出如下:

E:\pyproject\test\Scripts\python.exe E:\pyproject\test\main.py 
['野花遍地香']

这个返回的是个列表,如果只想获取文本内容,那么直接用取下标的方式即可

如果想要找到多个nick标签

result = et.xpath("/book//nick")

打印结果如下

E:\pyproject\test\Scripts\python.exe E:\pyproject\test\main.py 
[<Element nick at 0x1e24828>, <Element nick at 0x1e24848>, <Element nick at 0x2043c28>, <Element nick at 0x2043e28>, <Element nick at 0x2043cc8>, <Element nick at 0x2043dc8>, <Element nick at 0x2043ec8>, <Element nick at 0x2043f48>]

两个斜杠,表示的是找所有的子节点

通过属性筛选数据

<author>
        <nick id="10086">周大强</nick>
        <nick id="10010">周芷若</nick>
        <nick class="jay">周杰伦</nick>
        <nick class="jolin">蔡依林</nick>
        <div>
            <nick>惹了</nick>
        </div>
</author>

在一个节点下面,通过都会用很多个相同的标签,这个时候如果想拿到单独的某一个,就可以通过属性来筛选

result = et.xpath("/book//author/nick[@class='jay']/text()")

输出结果如下:

E:\pyproject\test\Scripts\python.exe E:\pyproject\test\main.py 
['周杰伦']

进程已结束,退出代码为 0

这里可以通过中括号的方式对属性进行筛选,格式为@属性名=值

取节点属性

如果想要取到某一个节点的属性值,而不是文本内容,那么可以用下面的方式

result = et.xpath("/book/partner/nick/@id")

输出结果如下:

E:\pyproject\test\Scripts\python.exe E:\pyproject\test\main.py 
['ppc', 'ppbc']

直接用@加属性名字,就可以拿到属性值

xpath处理HTML

数据准备

html = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Title</title>
</head>
<body>
    <ul>
        <li><a href="http://www.baidu.com">百度</a></li>
        <li><a href="http://www.google.com">谷歌</a></li>
        <li><a href="http://www.sogou.com">搜狗</a></li>
    </ul>
    <ol>
        <li><a href="feiji">飞机</a></li>
        <li><a href="dapao">大炮</a></li>
        <li><a href="huoche">火车</a></li>
    </ol>
    <div class="job">李嘉诚</div>
    <div class="common">胡辣汤</div>
</body>
</html>

"""
提取数据

首先加载html文本

et=etree.HTML(html)

“huoche”>火车

李嘉诚

胡辣汤

“”"


#### 提取数据

首先加载html文本

```python
et=etree.HTML(html)

数据提取的方式和xml一样,也是一层一层往下找

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值