作者:亿达口香糖 | 来源:互联网 | 2023-09-25 08:07
介绍XPath是一种XML路径语言,被用于在XML文档中通过元素和属性进行导航安装pipinstalllxml使用html示例内容,下面的所有练习全都来自与此段示例
介绍 XPath是一种XML路径语言,被用于在XML文档中通过元素和属性进行导航
安装 pip install lxml
使用 html示例内容,下面的所有练习全都来自与此段示例
this is a text
this is a span
读取html内容
from lxml import etree with open('test.html', 'r', encoding='utf-8') as fr: html = fr.read() et = etree.HTML(html)
下面就接着这个代码段往下写。
所有节点、父节点、子孙节点 所有节点是通过指定'//*'来获取,例如
et.xpath('//*')
返回如下:
[, , , , , , , , , , , , , , , , , ]
子孙结点是通过'//'来获取
# 获取所有的li节点 et.xpath('//li')
父节点是通过'..'来获取,有点像linux的..上级目录
et.xpath('//p/../@class')
结果为
['color1']
获取文本text()
res0 = et.xpath('//body/p/text()')
返回结果
['this is a text']
获取指定标签下的内容 res1 = et.xpath('//li[1]/a/text()') print(res1)
返回结果
['北京']
指定具体的标签 res2 = et.xpath('//div/p/') print(res2)
返回内容
[]
指定类选择器 res3 = et.xpath('//li/a[@class="color2"]/text()') print(res3)
返回结果
['广州']
指定id选择器 res4 = et.xpath('//li/a[@id="color3"]/text()') print(res4)
返回结果
['上海']
模糊匹配 res5 = et.xpath('//li/a[contains(@href, "http")]/text()') print(res5)
返回结果
['西二旗']
指定某个属性的具体值 res6 = et.xpath('//li/a[@href="https://www.dogfei.cn"]/text()') print(res6)
返回结果
['西二旗']
获取指定位置的内容 res7 = et.xpath('//li[last()]/a/text()') print(res7)
返回结果
['西二旗']
也可以用[last() - 1]
还可以使用position()
res8 = et.xpath('//li[position() <3]/a/text()') print(res8)
返回结果
['北京', '上海']
通过使用position()
可以获取到一组数据
通配符 res9 = et.xpath('//li/*/text()') # *也可以省略 print(res9)
返回结果
['北京', '上海', '广州', '西二旗']
指定所有属性 res10 = et.xpath('//li//a[@*]/text()') print(res10)
返回结果
['北京', '上海', '广州', '西二旗']
使用./
再次查找 res11 = et.xpath('//li') for i in res11: r = i.xpath('./a/text()')[0] print(r)
返回结果
北京 上海 广州 西二旗
实战案例 此案例简单来爬取豆瓣电影的top250,只拿第一页的数据,打印出排名和电影名,重点是来掌握xpath
的用法
豆瓣电影top250的访问地址为:https://movie.douban.com/top250
查看页面源代码或者浏览器f12
查看页面元素定位到标签位置,打开其中一段分析来看:
1 src="https://img.php1.cn/3cd4a/1eebe/cd5/45a090220e38e09d.webp"/>
欢迎各位朋友关注我的公众号,来一起学习进步哦
推荐阅读
本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ...
[详细]
蜡笔小新 2024-12-27 11:39:44
本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ...
[详细]
蜡笔小新 2024-12-27 13:10:20
本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ...
[详细]
蜡笔小新 2024-12-26 17:37:25
根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ...
[详细]
蜡笔小新 2024-12-26 10:42:40
SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ...
[详细]
蜡笔小新 2024-12-25 19:26:39
在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ...
[详细]
蜡笔小新 2024-12-25 12:05:35
Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ...
[详细]
蜡笔小新 2024-12-28 09:44:49
本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ...
[详细]
蜡笔小新 2024-12-28 09:42:41
Java 中的 BigDecimal pow()方法,示例 ...
[详细]
蜡笔小新 2024-12-27 20:54:03
本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ...
[详细]
蜡笔小新 2024-12-27 19:42:28
本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ...
[详细]
蜡笔小新 2024-12-27 18:51:49
本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ...
[详细]
蜡笔小新 2024-12-27 11:48:15
本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ...
[详细]
蜡笔小新 2024-12-26 19:47:05
本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ...
[详细]
蜡笔小新 2024-12-25 17:40:33
探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ...
[详细]
蜡笔小新 2024-12-25 13:38:29