''''
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