当前位置: 首页 > 工具软件 > XP Parser > 使用案例 >

Xpath 语法理解(parsel)

太叔俊侠
2023-12-01
''''
xpath  理解
在 html / xhtml 文档信息查找信息

'''


import parsel   #  pip install parsel  进行安装

#  当前为字符串类型  str
html_str = '''
<div>
    <ul>
        <li class="item_1">
            <a href="link1.html">第一个</a>
        <li class="item_2">
            <a href="link2.html">第二个</a>
        <li class="item_3">
            <a href="link3.html">第三个</a>
        <li class="item_4">
            <a href="link4.html">第四个</a>
        <li class="item_5">
            <a href="link5.html">第五个</a>
    </ul>     
</div>    
'''
#  转换数据类型 将字符串 转化为  selector 对象
data = parsel.Selector(html_str)



#  加上 .getall()   方法 取出全部数据  此时返回 列表 数据结果 自动补全 html代码(把缺失的html补充完整)
#  加上 .extract()  取出全部数据 返回结果类似 原字符串 但也补全了 缺失的  html 代码

# 2.1 从根节点开始,获取所有 a 标签
dame1 = data.xpath('/html/body/div/ul/li/a').extract()

# 2.2 跨节点获取所有 a 标签
dame2 = data.xpath('//a').extract()

# 2.3 选取当前节点 使用场景 : 需要对选取标签的下一级标签进行多次提取
dame3 = data.xpath('//ul')
dame4 = dame3.xpath('./li').extract()  # 取出当前节点所有 li 标签
dame5 = dame3.xpath('./li/a').extract()  # 取出当前所有 a 标签

# 2.4 选取当前节点的父节点 获取父节点 class 属性值
dame6 = data.xpath('//a')                   #  ../  表示当前节点下
dame7 = dame6.xpath('../@class').extract()   #  a 标签的父标签的 class 属性值

# 2.5 获取第三个 li 标签的节点 (两种方法)
dame8 = data.xpath('//li[3]').extract()   # html的索引从 1 开始

dame9 = data.xpath('//li')[2].extract()  #  返回结果为列表 根据索引取值

# 2.6 通过属性定位的方法获取第四个 a 标签
dame10 = data.xpath('//a[@href="link4.html"]').extract()  #  精确定位 href 的值 来确定,提取数据

# 2.7 用属性定位标签 ,获取第四个 a 标签包裹的文本内容
dame11 = data.xpath('//a[@href="link4.html"]/text()').extract()  # 扩展 2.6

# 2.8 获取第五个 a 标签的 href  属性值
dame12 = data.xpath('//li[5]/a/@href').extract()
#  因为 a 标签 不在同一级, 所以取 上一级标签 li 标签 再进行数据提取


print(dame12)



————————END

 类似资料: