『python爬虫』10. 数据解析之xpath解析(保姆级图文)

news/2025/1/3 4:07:35/

目录

  • 安装库
  • xpath入门
    • 怎么快速得到xpath路径
    • xpath节点的关系
    • xpath方法
    • 小型实战
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

安装库

pip install lxml

xpath入门

怎么快速得到xpath路径

(相对路径)复制xpath->//*[@id="1"]/div/div[1]/h3/a[1]
(从根节点开始的绝对路径)复制完整的xpath->/html/body/div[2]/div[5]/div[1]/div[3]/div[1]/div/div[1]/h3/a[1]
在这里插入图片描述

xpath节点的关系

<book><id>1</id><name>野花遍地香</name><price>1.23</price><author><nick>周大强</nick><nick>周芷若</nick></author>
</book>

在上述html代码中

  • book, id, name, price…都被称为节点.
  • Id, name, price, author被称为book的⼦节点
  • book被称为id, name, price, author的⽗节点
  • id, name, price,author被称为同胞节点

xpath方法

from lxml import etreexml = """
<book><id>1</id><name>野花遍地香</name><price>1.23</price><nick>臭豆腐</nick><author><nick id="10086">周大强</nick><nick id="10010">周芷若</nick><nick class="joy">周杰伦</nick><nick class="jolin">蔡依林</nick><div><nick>热热热热热1</nick></div><span><nick>热热热热热2</nick></span></author><partner><nick id="ppc">胖胖陈</nick><nick id="ppbc">胖胖不陈</nick></partner>
</book>
"""tree = etree.XML(xml)
# result = tree.xpath("/book")  # /表示层级关系. 第一个/是根节点
# result = tree.xpath("/book/name")
# result = tree.xpath("/book/name/text()")  # text() 拿文本
result = tree.xpath("/book/author//nick/text()")  # // 所有的后代,无论是第几代后代
print(result)
result = tree.xpath("/book/author/*/nick/text()")  # * 任意的节点. 通配符 这里区别与上一处是要求得到的是子代的子代
print(result)
result = tree.xpath("/book//nick/text()")
print(result)

小型实战

  • tree = etree.XML(xml)#如果是xml格式

  • tree = etree.parse(“b.html”)#如果是html格式,b.html的内容就是上面的xml的内容

  • xpath的顺序是从1开始数的, []表示索引

  • [@xxx=xxx] 属性的筛选

  • 相对查找时在./后面加上后续的路径

from lxml import etree
xml = """
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Title</title></head><body><ul><li><a href="http://www.baidu.com">百度</a></li><li><a href="http://www.google.com">谷歌</a></li><li><a href="http://www.sogou.com">搜狗</a></li></ul><ol><li><a href="feiji">飞机</a></li><li><a href="dapao">大炮</a></li><li><a href="huoche">火车</a></li></ol><div class="job">李嘉诚</div><div class="common">胡辣汤</div></body>
</html>
"""tree = etree.XML(xml)#如果是xml格式
# tree = etree.parse("b.html")#如果是html格式,b.html的内容就是上面的xml的内容result = tree.xpath('/html')
result = tree.xpath("/html/body/ul/li/a/text()")
result = tree.xpath("/html/body/ul/li[1]/a/text()")  # xpath的顺序是从1开始数的, []表示索引result = tree.xpath("/html/body/ol/li/a[@href='dapao']/text()")  # [@xxx=xxx] 属性的筛选print(result)ol_li_list = tree.xpath("/html/body/ol/li")for li in ol_li_list:# 从每一个li中提取到文字信息result = li.xpath("./a/text()")  # 在li中继续去寻找. 相对查找print(result)result2 = li.xpath("./a/@href")  # 拿到属性值: @属性print(result2)print(tree.xpath("/html/body/ul/li/a/@href"))print(tree.xpath('/html/body/div[1]/text()'))
print(tree.xpath('/html/body/ol/li/a/text()'))

在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』



http://www.ppmy.cn/news/61132.html

相关文章

安装gitea

1、安装包&#xff08;gitea-1.13.1-linux-amd64&#xff09;上传到服务器&#xff0c;并添加执行权限 链接&#xff1a;https://pan.baidu.com/s/1SAxko0RhVmmD21Ev_m5JFg 提取码&#xff1a;ft07 chmod x gitea-1.13.1-linux-amd64 2、执行 ./gitea-1.13.1-linux-amd64 web…

Django如何使用templates显示网页和静态资源

Django templates and static 什么是templates? 在我们访问Django的url时&#xff0c;有时我们想返回html文件&#xff0c;但是这些文件不能随便放置&#xff0c; 我们就需要放到templates文件夹中&#xff0c;tamplates文件夹可以创建到每一个app中&#xff0c; 也可以创建…

AXI协议相关概念(一)

猝发&#xff08;Burst&#xff09; 拍&#xff08;beat&#xff09;&#xff1a;在时钟采样沿valid和ready信号同时拉高持续一个时钟周期&#xff0c;即为一拍&#xff0c;持续两个时钟周期&#xff0c;即为两拍&#xff0c;依次类推。可以概括为在时钟采样沿握手信号同时拉高…

Packet Tracer – 研究 VLAN 实施

Packet Tracer – 研究 VLAN 实施 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 S1 VLAN 99 172.17.99.31 255.255.255.0 不适用 S2 VLAN 99 172.17.99.32 255.255.255.0 不适用 S3 VLAN 99 172.17.99.33 255.255.255.0 不适用 PC1 NIC 172.17.10.2…

java servlet 农机租赁网站系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java servlet 农机租赁网站系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助 系统采用 serlvetdaobean 模式开发 &#xff0c;系统具有完整的源代码和数 据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,M…

Codeforces Round 871 (Div. 4) 题解

题目 ALove StoryBBlank SpaceCMr. Perfectly FineDGold RushEThe LakesFForever WinterGHits DifferentHDont Blame Me A. Love Story Timur loves codeforces. Thats why he has a string &#x1d460; having length 1010 made containing only lowercase Latin letters…

有研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具(上)

导语&#xff1a;研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具。 Dell PFS BIOS提取器 介绍 解析 Dell PFS BIOS 映像并提取其 SPI/BIOS/UEFI 固件组件。它支持所有Dell PFS 修订版和格式&#xff0c;包括最初在 ThinOS 包中LZMA压缩、ZLIB压缩或拆分成块的格式。输出…

体外诊断(IVD)高速发展

体外诊断&#xff08;IVD&#xff09;实际一直是临床的重要组成部分。体外诊断&#xff0c;是指通过对人体样本(血液、体液、组织等)进行检测而获取临床诊断信息&#xff0c;进而判断疾病或机体功能的产品和服务&#xff0c;其检测原理和方法涉及免疫学、微生物学、分子生物学等…