首先,区别于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) .即是本节点,…为父节点