python爬虫学习27

python爬虫学习27

今天继续学习Xpath

上接上篇

目录

    • python爬虫学习27
      • 五、Xpath 的使用之二
        • 5-5 子节点
        • 5-6 父节点
        • 5-7 属性匹配

五、Xpath 的使用之二

不熟悉的时候先把规则附上:

python爬虫学习27_第1张图片

5-5 子节点

通过/或者 //即可查找元素的子节点。

from lxml import etree

html = etree.parse('./text.html', etree.HTMLParser())
# 检索所有li节点下的a节点
result = html.xpath('//li/a')
print(result)

运行结果:

在这里插入图片描述

当然上例是寻找特定节点下的直接子节点,若要找寻某个节点内的所有子节点:

from lxml import etree

html = etree.parse('./text.html', etree.HTMLParser())
result = html.xpath('//ul//a')
print(result)

运行结果:

在这里插入图片描述

当然对于我们所选取html来说结果是一样的,当时上述两种方式所表述的意义是完全不同的。

接下来,请大家思考,如果我们把Xpath写成下面这样,会匹配到什么结果?

'//ul/a'
from lxml import etree

html = etree.parse('./text.html', etree.HTMLParser())
result = html.xpath('//ul/a')
print(result)

对于Xpath语言来说一个/代表选取ul节点下的直接节点a,那么结果是当然的:

在这里插入图片描述

5-6 父节点

知道了如何查询子节点和子孙节点,那如何查询父节点呢?

这次换了一段html,比如我们想查找这里的div节点

python爬虫学习27_第2张图片

假如选中class属性为baikeLogo的h1节点,我们想要得到它的父节点的id属性,可以这样操作:

from lxml import etree

html = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//h1[@class="baikeLogo"]/../@id')
print(result)

运行结果:

在这里插入图片描述

也可以通过parent::获取父节点:

# parent::
from lxml import etree

html = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//h1[@class="baikeLogo"]/parent::*/@id')
print(result)

运行结果:

在这里插入图片描述

5-7 属性匹配

想要匹配特定属性的节点,就要用到@,在之前的案例中我们已经见到过他了:

比如,我们想匹配这里的所有class属性为li的li节点:

python爬虫学习27_第3张图片

# 属性匹配

from lxml import etree

html = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//li[@class="li"]')
print(result)

运行结果:从截图中我们可以看到符合的结果应该有3个,运行结果里也有三个

在这里插入图片描述

那么问题来了,给完们返回的这仨东西是不是我们想要的那三个呢?

今日就到这了,卖个关子先。。。

你可能感兴趣的:(python,爬虫,学习)