解析神器xpath使用教程

介绍

XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历

为什么要学习xpath和parsel

  • parsel是一款高性能的 Python HTML/XML 解析器。
  • 将字符串转化为Selector对象,Selector对象具有xpath的方法,返回结果的列表,能够接受bytes类型的数据和str类型的数据。
  • 我们可以利用XPath,来快速的定位特定元素以及获取节点信息

节点

每个html的标签我们都称之为节点。(根节点、子节点、同级节点)

节点的关系

xpath说明

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。

xpath表达式

表达式 描述
nodename 选中该元素。
/ 从根节点选取、或者是元素和元素间的过渡。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。跨节点获取标签
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
text() 选取文本。
  • 选取未知节点
通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。
/div/* 选取 div元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

xpath的使用方法

要用到parsel模块

import parsel

使用xpath的前提是 具有xpath方法 –> Selector对象

提取到的数据返回一个列表

转换数据类型方法

1
2
data = parsel.Selector(html_str).extract()  # parsel能够把缺失的html标签补充完成
data = parsel.Selector(html_str) # parsel能够把缺失的html标签补充完成

xpath表达式说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<div> 
<ul>
<li class="item-1">
<a href="link1.html">第一个</a>
</li>

<li class="item-2">
<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. 从根节点开始,获取所有 a 标签
1
2
result = data.xpath('/html/body/div/ul/li/a').extract()
print(result)
  1. 跨节点获取所有 a 标签
1
2
result = data.xpath('//a').extract()
print(result)
  1. 选取当前节点 使用场景:需要对选取的标签的下一级标签进行多次提取
1
2
3
4
result = data.xpath('//ul')
result2 = result.xpath('./li').extract()
result3 = result.xpath('./li/a').extract()
print(result3)
  1. 选取当前节点的父节点,获取父节点的class属性值
1
2
3
result = data.xpath('//a')
result4 = result.xpath('../@class').extract()
print(result4)
  1. 获取第三个 li 标签的节点(两种方法)
1
2
3
result = data.xpath('//li[3]').extract()
result = data.xpath('//li')[2].extract()
print(result)
  1. 通过定位属性的方法获取第四个 a 标签
1
2
result = data.xpath('//a[@href="link4.html"]').extract()
print(result)
  1. 用属性定位标签,获取第四个 a 标签包裹的文本内容
1
2
3
result = data.xpath('//a[@href="link4.html"]/text()').extract()

print(result)
  1. 获取第五个 a 标签的href属性值
1
2
result = data.xpath('//li[5]/a/@href').extract()
print(result)

可以将上面的代码复制到本地 print一下


或者直接使用谷歌浏览器插件 xpath helper


下载方式:

  1. 谷歌商店下载–> 下载地址

  2. 本地下载–> 下载地址

本地下载安装方法可以百度,很简单的–>传送门