XPath使用路径表达式来选取XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
下面列出了最有用的表达式:
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
选取未知节点
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
import parsel # str --> Selector对象具有xpath方法
提取到的数据返回一个列表
html_str = """
<div>
<ul>
<li class="item-i">
<a href="link1.html">第一个</a>
</li>
<1iclass="item-2个>J学言
<a href="link2. html">第二个</a>
</li>
<li class="item-3">
<a href="link3.html">第三个</a>
</li>
<li class="item-4">
<a href="link4.html">第四个</a>
</li>
<li class="item-5">
<a href="link5.html">第五个</a>
</li>
</ul>
</div>
# 1、转换数据类型
# data = parsel.Selector(html_str).extract()
# parsel能够把缺失的html标签补充完成
data = parsel.Selector (html_str) # parsel能够把缺失的html标签补充完成
# 2、解析数据--list类型
# print(data)
# 2、1从根节点开始,获取所有<a>标签
result = data.xpath(' /html/body/ div/ul/li/a').extract()
# 2、2跨节点获取所有<a>标签
result = data. xpath('/ /a').extract()
# 2、3选取当前节点――使用场景:需要对选取的标签的下一级标签进行多次提取
result = data.xpath('//ul')
result2 = result.xpath(' ./li').extract() #提取当前节点下的<li>标签
result3 = result.xpath(' ./li/a').extract() #提取当前节点下的<a>标签
# 2、4选取当前节点的父节点,获取父节点的class属性值
result = data.xpath(' //a')
result4 = result.xpath('../@class').extract()
# 2、5获取第三个<li>标签的节点(两种方法)
result = data. xpath('//li[3]').extract()
result = data. xpath(' / /1i')[2].extract()
# 2、6 通过定位属性的方法获取第四个<a>标签
result = data. xpath(' / / a [@href="link4.html"]’).extract()
#2、7用属性定位标签,获取第四个<a>标签包裹的文本内容
result = data.xpath('//a[@href="link4.html"]/text()' ). extract()
#2、8获取第五个<a>标签的href属性值
result = data. xpath(' / /1i[5]/a/@href').extract(#了解模糊查询
result = data.xpath('//li[contains(@class,"it")]’).extract ()
#同时获取<li>标签的属性以及<a>标签的文本
# result = data.xpath('//li/@class|//a/text()').extract()
print (result)
如何选取多个标签?
通过在路径表达式中使用“”运算符,您可以选取若干个路径。(逻辑运算符)