目录
  1. 概述
  2. 节点概念
    1. 父节点
    2. 子节点
    3. 同胞节点
    4. 先辈节点
    5. 后代节点
  3. 节点选择
    1. 语法表达式
    2. 节点选择实例
    3. 其它谓语
    4. 实例代码
【爬虫】Xpath语法解析

概述

  • XPath是一门在XML文档中查找信息的语言, 对HTML文档也有很好的支持。
  • XPath使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

节点概念

父节点

  • 每个元素及属性都有一个父节点;
  • 在下面的例子中, user 元素是 namesexidgoal 元素的父节点:
1
2
3
4
5
6
<user>
<name>xiao ming/name>
<sex>J K. Rowling</sex>
<id>34</id>
<goal>89</goal>
</user>

子节点

  • 元素节点可有0个、一个或多个子节点,在下面的例子中;
  • namesexidgoal 元素都是 user 元素的子节点:
1
2
3
4
5
6
<user>
<name>xiao ming/name>
<sex>J K. Rowling</sex>
<id>34</id>
<goal>89</goal>
</user>

同胞节点

  • 同胞节点拥有相同的父节点;
  • 在下面的例子中, namesexidgoal 元素都是同胞节点:
1
2
3
4
5
6
<user>
<name>xiao ming/name>
<sex>J K. Rowling</sex>
<id>34</id>
<goal>89</goal>
</user>

先辈节点

  • 先辈节点指某节点的父、父的父节点等;
  • 在下面的例子中, name 元素的先辈是 user 元素和 user_database 元素:
1
2
3
4
5
6
7
8
<user_database>
<user>
<name>xiao ming/name>
<sex>J K. Rowling</sex>
<id>34</id>
<goal>89</goal>
</user>
</user_database>

后代节点

后代节点指某个节点的子节点, 子节点的子节点等;
在下面的例子中, user_database 的后代是 usernamesexidgoal 元素:

1
2
3
4
5
6
7
8
<user_database>
<user>
<name>xiao ming/name>
<sex>J K. Rowling</sex>
<id>34</id>
<goal>89</goal>
</user>
</user_database>

节点选择

语法表达式

表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//从匹配选择的当前节点选择文档中的节点, 而不考虑它们的位置
.选取当前节点
选取当前节点的父节点
@选取属性

节点选择实例

路径表达式结果
user_database选取元素user_database的所有子节点
/user_database选取根元素user_database注释: 假如路径起始于正斜杠(/), 则此路始终代表到某元素的绝对路径
/user_database/user选取属于user_database的子元素的所有user元素
//user选取所有user子元素, 而不管它们在文档中的位置
user_database//user选择属于user_database元素的后代的所有user元素, 而不管它们位于user_database之下的什么位置
@attribute选取名为attribute的所有属性

其它谓语

Xpath语法中的谓语用来查找某个特定的节点或者包含某个指定值的节点, 谓语在方括号中。

路径表达式结果
/user_database/user[1]选取属于user_database子元素的第一个user元素
//li[@attribute]选取所有拥有名为attribute属性的li元素
//li[@attribute=‘red’]选取所有li元素,且这些元素拥有值为red的attribute属性
//li/span/text()通过/text()可以获取标签中的文本信息

实例代码

1
2
3
4
5
6
7
8
9
10
import requests
from lxml import etree

headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'}
url = 'http://www.qiushibaike.c/text/'
res = requests.get(url, headers=headers)
selector = etree.HTML(res.text)
id = selector.xpath('//[@id="qiushi_tag_118732380"]/div[1]/a[2]/h2/text()')
print(id)
文章作者: Haibei
文章链接: http://www.haibei.online/posts/910707058.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Haibei的博客
打赏
  • 微信
  • 支付宝

评论