python爬虫学习28 今天继续学Xpath
上接上篇
目录
-
- python爬虫学习28
-
- 五、Xpath的使用其三
-
- 5-8 文本获取
- 5-9 属性获取
- 5-10 属性多值匹配
五、Xpath的使用其三
照例把规则附上:
文章图片
5-8 文本获取 昨天很厚道的挖了个坑,就将在5-8处被填上,我们可以使用text()方法来获取节点下的文本:
昨天我们截取的html文本如下:
文章图片
当时我们成功匹配了属性clas为li的li节点:
文章图片
那么如何检验呢?
# 获取文本from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//li[@class="li"]//text()')
print(result)
运行结果:节点中所有的文本都会以一个列表的形式被返回
文章图片
哎嘿,这不就检验出来了吗
在学会使用text()之后,请大家思考以下情况的结果
result = html.xpath('//li[@class="li"]/text()')
from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//li[@class="li"]/text()')
print(result)
运行结果:
文章图片
/的含义为选取直接子节点,可以发现此种情况只选取了li节点节点内的文本,而li节点的子节点中的文本并没有被匹配。
5-9 属性获取 对于获取一个节点的属性,在之前我们学习属性匹配的时候已经有涉及到了,我们可以使用@来定位一个属性并使之输出:
# 获取属性from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
# 这里的含义为匹配所有li节点下所有a节点的herf属性
# 获取属性与匹配属性的不同之处在于 获取属性时不用加 []
result = html.xpath('//li//a/@href')
print(result)
运行结果:所有的匹配结果将存放到一个列表中返回给我们
文章图片
5-10 属性多值匹配 首先请大家区分属性匹配与属性获取的区别。然后有的节点的某个属性可能会有两个值,这个时候:
文章图片
加入我们稍稍修改一下第一个li节点的属性,然后进行常规属性的匹配:
from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//li[@class="li"]')
print(result)
运行结果:很显然只能匹配到两个
文章图片
但这时你可能有点不服,尝试补全属性挣扎一波:
from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
result = html.xpath('//li li-first[@class="li"]')
print(result)
运行结果:发现竟然是一种非法表达
文章图片
那么这个时候,我们就得使用contains方法进行匹配:
from lxml import etreehtml = etree.parse('./python.html', etree.HTMLParser())
# 该处意为 属性中含有 “li” 即返回一个结果
result = html.xpath('//li[contains(@class, "li")]')
print(result)
运行结果:
文章图片
【python|python爬虫学习28】今日结束,明日继续!
推荐阅读
- python|python爬虫学习27
- python|python爬虫学习29
- Python爬虫基础学习笔记|python爬虫学习22
- Python爬虫基础学习笔记|python爬虫学习23
- Python爬虫基础学习笔记|python爬虫学习21
- python|python爬虫学习30
- Python爬虫基础学习笔记|python爬虫学习14
- #yyds干货盘点#python包
- Python求列表中最大,最小,第二大,第二最小值