java中的接口是类吗
396
2022-08-31
利用python爬虫(part10)--Xpath节点集与函数
学习笔记 编辑器:Sublime 注意:这里的理论部分是关于XML文档的,但是介于HTML和XML的相似性,大家可以自行做类比,有的地方我也会用HTML和XML做类比。
上一篇:Xpath与谓词的爱
文章目录
节点集上使用谓词节点集上的并运算节点集与函数
节点集上使用谓词
Xpath允许在Xpath绝对路径最后寻找出的节点集上使用谓词,作用是从当前节点集中筛选、过滤出所需要的节点,使用格式为:
(绝对路径)[谓词]
针对下面的HTML文档(将这个文档命名为test12.html),我们来写一段代码,直观感受一下这个知识点(也可能啥也感受不到??):
python代码:
from lxml import etreewith open('test12.html', 'rb') as f: html = f.read().decode('utf-8')#print(html)parse_html = etree.HTML(html)my_xpath = '(/html//li)[1]'data_list = parse_html.xpath(my_xpath)print(data_list)print('-'*15)my_xpath = '/html//li[1]'data_list = parse_html.xpath(my_xpath)print(data_list)
Sublime输出:
[
需要注意的是,python代码中两种Xpath表达式得到的结果虽然相同,但是寻找节点的过程是不同的。
节点集上的并运算
Xpath允许将多个Xpath表达式寻找出的节点集用|进行集合的并运算,所得到的的节点集中的节点按照节点在XML中的对应的标记或文本出现的先后顺序排列。
来个例子吧,用上面的test12.html为例:
from lxml import etreewith open('test12.html', 'rb') as f: html = f.read().decode('utf-8')#print(html)parse_html = etree.HTML(html)my_xpath = '/html//li[@class="Ra01"]/name/text() | /html//li[@class="Ra01"]/age/text()'data_list = parse_html.xpath(my_xpath)print(data_list)print('-'*15)
Sublime输出:
['Huang', '8', 'Bai', '10']---------------[Finished in 0.4s]
节点集与函数
为例计算和节点集有关的数据,Xpath语言给出了几个作用于节点集上的函数。
count(节点集)
count()函数将返回参数指定的节点集中的节点的个数。
举个例子,还是用上面的test12.html文件举例:
from lxml import etreewith open('test12.html', 'rb') as f: html = f.read().decode('utf-8')#print(html)parse_html = etree.HTML(html)my_xpath = 'count(/html//li[@class="Ra01"]/name)'data_list = parse_html.xpath(my_xpath)print(data_list)print('-'*15)my_xpath = 'count(/html//li[contains(food, "c")])'data_list = parse_html.xpath(my_xpath)print(data_list)
Sublime输出:
2.0---------------3.0[Finished in 0.5s]
sun(节点集)
sum()函数将节点集中的节点所包含的文本转换为数字,并返回它们的和,如果节点集中的某个节点所包含的文本不能转换为数字,则sum()会返回NaN
这里为了举例,我们新构建一个HTML文档,如下:
3
4
python代码:
from lxml import etreewith open('test13.html', 'rb') as f: html = f.read().decode('utf-8')#print(html)parse_html = etree.HTML(html)my_xpath = 'sum(/html//li/text())'data_list = parse_html.xpath(my_xpath)print(data_list)print('-'*15)my_xpath = 'sum(/html//li)'data_list = parse_html.xpath(my_xpath)print(data_list)print('-'*15)my_xpath = 'sum(/html/body/p)'data_list = parse_html.xpath(my_xpath)print(data_list)print('-'*15)my_xpath = 'sum(/html/body)'data_list = parse_html.xpath(my_xpath)print(data_list)
Sublime输出:
3.0---------------3.0---------------7.0---------------nan[Finished in 0.4s]
由结果,我们可以得出很多结论,请自行领会(因为博主不知道自己总结的对不对,哈哈哈)。
如有错误,请求指出。 Xpath系列暂时更完。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~