Python爬虫基础讲解(七):xpath的语法
2024-09-08 08:30:38
xpath语法
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)
如何选取多个标签?
通过在路径表达式中使用“”运算符,您可以选取若干个路径。(逻辑运算符)
小结
- xpath的概述XPath (XML Path Language),解析查找提取信息的语言
- xpath的节点关系:根节点,子节点,同级节点
- xpath的重点语法获取任意节点://
- xpath的重点语法根据属性获取节点:标签[@属性=’值’]
- xpath中获取节点的文本:text )
- xpath的获取节点属性值:@属性名
最新文章
- BZOJ 1115: [POI2009]石子游戏Kam
- Golang gopath
- 【转】【WPF】WPF 自定义快捷键命令(Command)
- XAMPP配置虚拟主机
- dmp文件导入的方法
- 统一代码风格工具——editorConfig
- VisionPro笔记:色彩区分
- leetcode — remove-duplicates-from-sorted-list
- 从vue源码看props
- Holer实现外网访问ARM嵌入式Linux系统
- 剑指offer(13)
- python机器学习-sklearn挖掘乳腺癌细胞(二)
- salt上编写了备份日志的脚本
- 【Codeforces 1110E】Magic Stones
- STL之Vector容器
- crontab命令的使用方法
- linux基础3
- poj3104(二分)
- Git Windows客户端保存用户名和密码
- CentOS下httpd下php 连接mysql 本机可以,外网报错Could not connect: Can&#39;t connect to MySQL server on &#39;127.0.0.1&#39; (13)2003 原因解析
热门文章
- Docker 专题总结
- P1028_数的计算(JAVA语言)
- OMnet++ 初学者教程 第一节 入门
- 抗DDOS应急预案实践-生产环境总结-建议必看
- [状压DP]车II
- [Fundamental of Power Electronics]-PART I-1.引言-1.2 1.3 电力电子技术的几个应用、本书内容
- Java 时间日期系列
- .NET HttpWebRequest(请求被中止: 未能创建 SSL/TLS 安全通道)和(基础连接已经关闭: 发送时发生错误)问题查找解决
- Spring Boot demo系列(九):Jasypt
- Go 类型转换与类型判断