Xpath语法详解与Python交互实现数据提取【重点】


​🕶️师兄简介:机械专业,通过自学成功进入IT领域,求学期间实现经济独立,对自学、兼职、计算机、学习规划等有独到见解!「点击了解更多


🤖师兄致力解决在大学生活与学习中遇到的各种问题.


🎁 公众号「渣师兄」内回复「渣学」可获得超 5T 的新生见面礼!


🔗官方网站: 渣学网 →「zhaxueit.cn」→ 大学生活与学习一站式解决方案.


🙏找师兄帮忙「无偿」请➕💓:zhaxueit

📓进资源群「每日分享」【免费】(坑位有限)也请➕💓:zhaxueit 并备注「进群」

👀个人主页:@渣师兄 ,欢迎关注、私信师兄!


🐐 登高必自卑,行远必自迩.
🍇 我始终坚信越努力越幸运
⭐️ 那些打不倒我们的终将会让我们变得强大
🍑 希望在编程道路上深耕的小伙伴都会越来越好



xpath语法详解

目标:
1:掌握什么是 xpath
2:掌握 xpath 匹配数据的几种语法格式
3:使用 xpath 的一些注意事项

xpath

答:xpath 是在 xml 文档中匹配数据的一种查询语言(俗称xml路径语言),因为 xml 文档与 html 文档结构非常类似,所以 xpath 也可以用在匹配 html 文档数据中(爬虫提取数据)

xpath匹配数据的几种语法格式

/div匹配文档中所有的 div 标签,返回匹配的内容对象

/div/p匹配文档中所有的div标签下的一级 p 标签,返回 p 标签下(包括p标签子标签)的所有的文本内容对象(是文本结点对象,不是字符串类型的文本)

/div//p匹配文档中所有 div 标签下的所有级别 p 标签(包含在div标签内其他标签下p标签),返回 p 标签下(包括p标签内子标签)的所有的文本内容对象(是文本结点对象,不是字符串类型的文本)

/div/p[1]匹配文档中所有div标签内的第一个 p 标签,返回这个 p 标签下的所有文本内容对象

/div[@class="name"]匹配文档中属性包含 class="name"的所有div标签,返回这个div标签下的所有文本内容对象

/div/p@src匹配文档内所有div标签下的p标签,获取p标签中src属性的值(是字符串类型不是文本对象类型)

/div[@class="byd"] | //div[@class="bm"]匹配文档内class属性为“byd”或者“bm”的所有div标签,返回下面所有标签的文本内容对象(不是字符串类型)

/li[ contains(@class,"car_")]匹配class属性中包含“car_”内容的所有 li 标签,返回下面所有标签的文本内容对象(不是字符串类型)

/li[@class="name"]/text()匹配 class 属性值为“name’”的所有 li 标签,并且返回 li 标签中(不包括li子标签)的文本内容(字符串类型)

整体图示

image-20211013105409947

path 的一些注意事项

最重要一条:xpath语法的开头查找标签必须要加两条//,一条/不能成功匹配

1.xpath语法中只要与条件有关,就要在条件两侧加上 [ ]

2.xpath语法内只要与标签属性有关,就要在属性前面加上@

3.xpath语法中末尾是 /text()或者 /@属性值,那么获取的值就是字符串类型的文本内容,除此之外获取的全部都是文本内容对象(不是字符串)

4.xpath语法是 //div/p/text(),只匹配所有div标签下p标签中的文本内容(字符串),不能匹配p标签下其他子标签的文本内容!!!

5.xpath语法是 //div/p,匹配所有div标签下p标签中(包含p标签下的其他子标签)的文本内容对象(不是字符串)

6.html一段文档是 <p class=“name”, id=6> 姓名

,其中class与id都是属性,匹配的文本内容是姓名,不是其他的!

lxml库搭配xpath语法实现数据提取【重点】

目标:
1:掌握 python 的第三方库 lxml 搭配 xpath 语法在 html 文档内提取数据的使用方法!
2:掌握 for 循环的另外一种用法以及怎么将列表内元素拼接为一个字符串

on 的第三方库 lxml 搭配 xpath 语法在 html 文档内提取数据的使用方法!

lxml库功能:与 xpath 语法搭配使用从而在 html 或者 xml 文档中提取出自己想要的数据

lxml库安装(unubtu):pip3 install lxml

lxml库在html文档代码内提取数据使用步骤:

from lxml import etree 导入模块
lxml_obj = etree.HTML( 网页的html源代码 ) 创建 lxml 对象用于提取数据

data_list = lxml_obj.xpath(xpath语法) 利用 xpath 语法从网页的html源代码中提取数据

lxml库搭配xpath语法在html文档中提取数据(电影、汽车等)最常用法如下:

from lxml import etree                                                导入模块
lxml_obj = etree.HTML( 网页的html源代码 )               创建 lxml 对象用于提取数据
lable_obj_list = lxml_obj.xpath(xpath语法)           利用 xpath 语法从网页的 html 源代码中 提取 数据存在的 标签结点对象
for  lable in data_list:                                          for循环遍历这个标签结点对象
	data_list = lable.xpath(xpath语法)           调用这个标签结点对象的xpath方法,在当前路径下匹配数据
	print(data_list)                                     打印数据

注意事项:

1:只要 lxml 对象调用了 xpath 方法,那么获取的数据类型一定是列表!!!!

2:在 html 文档中提取数据最常用法中通过 for 循环遍历数据结点对象里面那个xpath语法(第二个xpath)开头要以 . 开头,表示在当前标签结点下查找标签数据!

代码体验(提取数据使用步骤):

image-20211013105447337

最常用法截图:

image-20211013105454198

持续更新中…

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渣师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值