数据清洗之一:xpath

首先,区别于Beautiful的是,xpath是一门语言,不是一个库。这门语言带有80多个自带的函数。xpath是一门专注于在xml、html文档中选取节点的语言。

一、选取节点

如果html文档是一棵树的话,节点就是你在于哪个树杈子。默认的为总干,即html。
该如何选取节点呢?
选取节点有三中方式:一序列、二属性、三值

(一)通过序列

序列中提供了以下几个函数:last(),position()
from lxml import etree
tree = etree.HTML(html_data)
通过索引1 选取第一个li节点
first_li = tree.xpath("//div[@class=‘div1’]/ul/li[1]")
通过last函数获得最后索引,获取最后一个li节点
last_li = tree.xpath("//div[@class=‘div1’]/ul/li[last()]")
获取倒数第2个li节点
last_2_li = tree.xpath("//div[@class=‘div1’]/ul/li[last()-1]")
position返回节点的索引,返回索引小于4的,也就是返回前3个li节点
head_3_li = tree.xpath("//div[@class=‘div1’]/ul/li[position()<4]")

(二)通过属性

属性使用【@属性=‘’】

(三)通过标签值

注意:是根据子标签的值选取的父标签
from lxml import etree
tree = etree.HTML(html_data)
a_nodes = tree.xpath("//li[a=2]")
print(a_nodes)
a_nodes = tree.xpath("//li[a>2]")
print(a_nodes)
a_nodes = tree.xpath("//li[a!=2]")
print(a_nodes)

二、获取节点的属性和值
(一)先获取节点,再获取属性和值

print(a_node.text) 值
print(a_node.attrib[‘href’]) 属性
print(a_node.tag) 标签名

(二)直接在寻找节点的时候获取

a_node_text = tree.xpath("//div[@class=‘div2’]/ul/li[@class=‘item-3’][1]/a/text()")
href = tree.xpath("//a/@href")
即分别使用/text()和/@href

三、获取节点所有文字

li_node = tree.xpath("//li[@class=‘item-3’][1]")[0]
print(li_node.xpath(‘string(.)’))
等同于li_node_text = tree.xpath(“string(//li[@class=‘item-3’][1])”)

即node.xpath(‘string(.)’)=string(node) .即是本节点,…为父节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值