xpath 学习笔记

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//input[@id="kw"]

在这里插入图片描述
//input[@class=“btn self-btn bg s_btn”]

在这里插入图片描述

//a[@class="toindex"]

在这里插入图片描述

//div[@id="head"]/div[5]/div[2]/a[1]或
//div[@id="head"]/div[5]/div[2]/a[@class="toindex"]或
//div[@id="head"]//a[@class="toindex"]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

下面举例说明lxml的使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>#单标签型,最后要加斜线
    <title>xpath测试</title>
</head>
<body>
    <div class="song">
        火药
        <b>指南针</b>
        <b>印刷术</b>
        造纸术
    </div>
    <div class="tang">
        <ul>
            <li class="balove">停车坐爱枫林晚,霜叶红于二月花</li>
            <li id="hua">商女不知亡国恨,隔江犹唱后庭花</li>
            <li class="love" name="yang">一骑红尘妃子笑,无人知是荔枝来</li>
            <li id="bei">葡萄美酒夜光杯,欲饮琵琶马上催</li>
            <li><a href="www.baidu.com/">百度一下</a></li>
        </ul>
        <ol>
            <li class="lucy">寻寻觅觅,冷冷清清,凄凄惨惨戚戚</li>
            <li class="balili">乍暖还寒时候,最难将息</li>
            <li class="lilei">三杯两盏淡酒</li>
            <li>怎敌他晚来风急</li>
            <li>雁过也,正伤心,却是旧时相识</li>
            <li>爱就一个字,我只说一次</li>
            <li>爱情36计,我要立刻美丽</li>
        </ol>
    </div>
</body>
</html>
#author:Adminstrator
#date: 2019/8/25
from lxml import etree
tree = etree.parse('xpath.html')#返回的是一个对象
#生成对象
ret = tree.xpath('//div[@class="tang"]/ul/li[1]')#返回的是一个内存地址,用列表封存的
print(ret[0].text)
ret1 = tree.xpath('//div[@class="tang"]/ul/li[1]/text()')#这种形式返回的是一个列表
print(ret1)

#如何取  www.baidu.com
ret2=tree.xpath('//div[@class="tang"]/ul/li[last()]/a/@href')
print(ret2)
#一骑红尘妃子笑,无人知是荔枝来
ret3 = tree.xpath('//div[@class="tang"]/ul/li[@class="love" and @name="yang"]')
print(ret3[0].text)
#模糊匹配 contains,找classz中带有 l 的所有li标签
ret4 = tree.xpath('//li[contains(@class,"l")]')
print('..................................')
print(ret4)
print('......................................')
#模糊匹配,找文本中含有“爱”的li
ret5 = tree.xpath('//li[contains(text(),"爱")]/text()')
print(ret5)
#模糊匹配,以ba开头的所有li标签
ret6 = tree.xpath('//li[starts-with(@class,"ba")]/text()')
print('.............................................')
print(ret6)
#/和//的区别
ret7 = tree.xpath('//div[@class="song"]/text()')# / 内部标签里的内容得不到,只获取节点内容
print(ret7)
ret8 = tree.xpath('//div[@class="song"]//text()')# //  内部标签里的内容也可以得到,获取节点里面不带标签的所有内容
print(ret8)

#直接将所有的内容拼接起来,返回给你
ret9=tree.xpath('//div[@class="song"]')
string=ret9[0].xpath('string(.)')
print(string.replace('\t', '').replace('\n', ''))

### 关于XPath学习笔记与教程 #### XPath简介 XPath(XML Path Language)是一种用于在XML文档中定位和检索数据的语言。它可以通过路径表达式来导航XML树结构,从而获取所需的节点或属性[^3]。 #### 基础语法示例 以下是几个常见的XPath表达式及其功能: 1. **一般表达式** 使用路径方式选取所需元素。 ```python "/bookstore/book/title" ``` 这一表达式表示从根节点`<bookstore>`出发,找到所有的`<book>`标签下的`<title>`子节点[^2]。 2. **谓词表达式** 谓词允许进一步筛选符合条件的节点。 ```python "/bookstore/book[1]" ``` 表达式中的 `[1]` 是指第一个 `<book>` 元素;而 `/bookstore/book[last()]` 则会选中最后一个 `<book>` 元素[^2]。 3. **通配符表达式** 当不确定具体节点名称时,可以利用通配符 `*` 来匹配任意类型的节点。 ```python "/bookstore/*" "//title[@*]" ``` 上述两个例子分别代表了 bookstore 的所有直接子节点以及具有任何属性的 title 元素。 4. **轴表达式** 轴定义了一组相对当前上下文节点的关系方向。 ```python "child::book" "attribute::lang" "descendant-or-self::*" ``` 第一条命令返回的是 book 子节点集合;第二条则提取出名为 lang 的属性列表;第三种情况涵盖了本节点本身加上其全部后代节点。 5. **算术与逻辑操作** 支持基本数值计算及条件判断。 ```python "/bookstore/book[price>35.00]/title" ``` 此处仅选出价格超过 35 的书籍标题。 #### Python实现案例 下面展示如何借助第三方库lxml解析并查询HTML/XML文件内的信息: ```python from lxml import etree # 创建一个简单的 XML 文档对象模型 (DOM) root = etree.XML(""" <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="zh-CN">Harry Potter</title> <author>J.K. Rowling</author> <year>2007</year> <price>29.99</price> </book> </bookstore> """) # 查找所有书名 titles = root.xpath('//book/title/text()') print(titles) # 获取特定语言版本的图书数量 english_books_count = len(root.xpath("//book[./title/@lang='en']")) print(english_books_count) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值