xpath笔记

8 篇文章 0 订阅
2 篇文章 0 订阅

xpath安装

pip install xpath

什么是xpath?

xml是用来存储和传输数据使用的
和html的不通有两点:
(1)html用来显示数据,xml是用来传输数据
(2)html标签是固定的,xml标签是自定义的
xpath用来在xml中查找指定的元素,它是一种路径表达式

常用的路径表达式

常用的路径表达式:
常用的路径表达式:

/	    不考虑位置的查找
./	    从当前节点开始往下查找
../	    从当前节点的父节点查找
@       选取属性

实例:

使用解释
/bookstroe/book选取根节点bookstore下面所有直接子节点的book
//book选取所有book元素二不管它所在的位置
bookstroe//book查找bookstore西面所有的book
//@lang选取名为lang的所有属性的节点
谓语语法解释
/bookstore/book[1]bookstore子元素的第一个book
/bookstore/book[last()]boolstore的最后一个book元素
/bookstore/book[position() < 3]前两个book
//title[@lang]所有的带有lang属性的title节点
//title[@lang=‘en’]所有的lang属性值为en的title节点
*任何
@*匹配任何属性节点
node()匹配任何类型的节点
/bookstore/*匹配任何属性节点
//*选取文档中的所有元

chrome安装xpath插件

	将xpath插件拖到谷歌浏览器扩展程序中,安装成功

启动和关闭插件

	ctrl + shift + x

属性定位

	//input[@id="kw"]
	//input[@class="btn self-btn bg s_btn"]

层级定位

	//div[@id="head"]/div[@id="u_sp"]/a[@id="s_username_top"]
	【注意】索引从1开始

索引定位

	//div[@id="head"]//a[@class="s-user-name-top"]
	【注意】双斜杠//代表线面所有的a节点,不管位置

逻辑定位

	//input[@class="s_ipt" and @name="wd"]

模糊定位

	contains
		//input[contains(@class, "s_i")]
		ret=tree.xpath('//li[contains(text(),"爱")]/text()')
		所有的input属性,有class属性,并且属性中带有s_i的节点
	starts-with
		//input[starts-with(@class, "s")]
		所有的input,有class属性,并且属性以s开头

取文本

	//div[@id="u_sp"]//a[@class="mnav"][last()-1]/text()        获取节点内容
	//div[@id="u_sp"]//text()
	获取节点里面不带标签的所有内容
	# 直接将所有的内容拼接起来返回给你
	ret=tree.xpath('//div[@class="song"]')
	string=ret[0].xpath('string(.)')
	print(string.replace('\n','').replace('',''))

取属性

	//div[@id="u_sp"]//a[@class="mnav" 				    
	[last()-1]/@href

代码中使用xpath

导入方式
	from lxml import etree
	两种方式使用: 将html文档变成一个对象,然后调用对象的方法去查找指定的节点
	(1)本地文件
		tree = etree.parse('文件名')
	(2)网络文件
		tree = etree.HTML(网页字符串)
		
	ret = tree.xpath(路径表达式)
	【注】ret是一个列表
	ret=tree.xpath('//div[@class="tang"]/ul/li//a/@href')
	#ret=tree.xpath('//div[@class="tang"]/ul/li[@class="love"and@name="yang"]')
	#ret=tree.xpath('//div[@class="tang"]/ul/li[contains(@class,"l")]')
	ret=tree.xpath('//li[contains(text(),"爱")]/text()')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值