XPath与lxml解析库

test.xml

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>

<bookstore>

    <book name="halibote">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
        <abc>
            <book lang="中文">neibu</book>
        </abc>
    </book>

    <book name="hongloumeng">
        红楼梦
    </book>

</bookstore>

hello.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!-- hello.html -->
<div>
    <ul>
        <li class="item-0">meiguo<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>

选取节点

python 复制代码
from lxml import etree

tree = etree.parse("test.xml")
list_node = tree.xpath("book/@name")
print(list_node[0])

list_node = tree.xpath("/bookstore")
print(list_node[0])
list_node = tree.xpath("book/title")
print(list_node[0].text)
list_node = tree.xpath("book//book")
print(list_node)
list_node = tree.xpath("//@lang")
print(list_node)

谓语:指路径表达式的附加条件

python 复制代码
from lxml import etree

tree = etree.parse("test.xml")
list_node = tree.xpath("book[2]")
print(list_node[0].text)

选取未知节点

python 复制代码
from lxml import etree

tree = etree.parse("test.xml")
list_node = tree.xpath("/bookstore/*")
print(list_node)

选取若干路径

python 复制代码
from lxml import etree

tree = etree.parse("test.xml")
list_node = tree.xpath("//book/title | //book/price")
print(list_node)

通过轴限定

python 复制代码
from lxml import etree

tree = etree.parse("test.xml")
list_node = tree.xpath("descendant::book")
print(list_node)

操作XML节点

python 复制代码
from lxml import etree

root = etree.Element("root",a="1")
child = etree.SubElement(root, "child")
root.set("b", "2")
root.text = "yilang"
print(etree.tostring(root))
print(root.tag)

print(root.text)

# 从字符串中解析XML,返回根节点
root = etree.XML("<root>"
                    "<a x='123'>aText"
                        "<b/>"
                        "<c/>"
                        "<b/>"
                    "</a>"
                 "</root>")
# 从根节点查找,返回匹配到的节点名称
print(root.find("a").tag)
# 从根节点开始查找,返回匹配到的第一个节点的名称
print(root.findall(".//a[@x]")[0].tag)

在XML中搜索

python 复制代码
from lxml import etree

tree = etree.parse("hello.html",parser=etree.HTMLParser())
list_node = tree.xpath("//li")
print(list_node[0].text)
相关推荐
卷无止境5 分钟前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
fanruitian17 分钟前
python else用法
开发语言·python
Thinker QAQ1 小时前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
用户8356290780511 小时前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python
vx_Biye_Design1 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
学Linux的语莫3 小时前
python中类的常见写法
开发语言·python·状态模式
垆边人似月.3 小时前
Python中如何使用get函数实现频次查询
服务器·前端·python
AI 编程助手GPT4 小时前
GPT 脚本别只发一个文件:用 uv 把依赖和锁一起交付
人工智能·python·gpt·uv·依赖管理
Patrick在香港4 小时前
第 16,216 次连接之后,它不干了
python·网络编程·socket·tcp·连接池
我命由我123454 小时前
Python 开发 - Python 虚拟环境
运维·开发语言·后端·python·http·https·java-ee