python爬虫学习27 今天继续学习Xpath
上接上篇
目录
-
- python爬虫学习27
-
- 五、Xpath 的使用之二
-
- 5-5 子节点
- 5-6 父节点
- 5-7 属性匹配
五、Xpath 的使用之二
不熟悉的时候先把规则附上:
文章图片
5-5 子节点 通过/或者 //即可查找元素的子节点。
from lxml import etreehtml = etree.parse('./text.html', etree.HTMLParser())
# 检索所有li节点下的a节点
result = html.xpath('//li/a')
print(result)
运行结果:
文章图片
当然上例是寻找特定节点下的直接子节点,若要找寻某个节点内的所有子节点:
from lxml import etreehtml = etree.parse('./text.html', etree.HTMLParser())
result = html.xpath('//ul//a')
print(result)
运行结果:
文章图片
当然对于我们所选取html来说结果是一样的,当时上述两种方式所表述的意义是完全不同的。
接下来,请大家思考,如果我们把Xpath写成下面这样,会匹配到什么结果?
'//ul/a'
from lxml import etreehtml = etree.parse('./text.html', etree.HTMLParser())
result = html.xpath('//ul/a')
print(result)
对于Xpath语言来说一个/代表选取ul节点下的直接节点a,那么结果是当然的:
文章图片
5-6 父节点 知道了如何查询子节点和子孙节点,那如何查询父节点呢?
这次换了一段html,比如我们想查找这里的div节点
文章图片
假如选中class属性为baikeLogo的h1节点,我们想要得到它的父节点的id属性,可以这样操作:
from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//h1[@class="baikeLogo"]/../@id')
print(result)
运行结果:
文章图片
也可以通过parent::获取父节点:
# parent::
from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//h1[@class="baikeLogo"]/parent::*/@id')
print(result)
运行结果:
文章图片
5-7 属性匹配 想要匹配特定属性的节点,就要用到@,在之前的案例中我们已经见到过他了:
比如,我们想匹配这里的所有class属性为li的li节点:
文章图片
# 属性匹配from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//li[@class="li"]')
print(result)
运行结果:从截图中我们可以看到符合的结果应该有3个,运行结果里也有三个
文章图片
那么问题来了,给完们返回的这仨东西是不是我们想要的那三个呢?
【python|python爬虫学习27】今日就到这了,卖个关子先。。。
推荐阅读
- python|python爬虫学习28
- python|python爬虫学习29
- Python爬虫基础学习笔记|python爬虫学习22
- Python爬虫基础学习笔记|python爬虫学习23
- Python爬虫基础学习笔记|python爬虫学习21
- python|python爬虫学习30
- Python爬虫基础学习笔记|python爬虫学习14
- #yyds干货盘点#python包
- Python求列表中最大,最小,第二大,第二最小值