5. 所有节点
- 我们一般会以//开头的XPath规则,来选取所有符合要求的节点。
- 这里还是以第一个实例中的HTML文本为例,选取其中所有的节点,实现代码如下:
from lxml import etree
html = etree.parse("test.html",etree.HTMLParser())
result = html.xpath('//*')
print(result)
- 运行结果如下:
[<Element html at 0x2506e48f6c0>, <Element body at 0x2506e48f7c0>, <Element div at 0x2506e48f800>, <Element ul at 0x2506e48f840>, <Element li at 0x2506e48f880>, <Element a at 0x2506e48f900>, <Element li at 0x2506e48f940>, <Element a at 0x2506e48f980>, <Element li at 0x2506e48f9c0>, <Element a at 0x2506e48f8c0>, <Element li at 0x2506e48fa00>, <Element a at 0x2506e48fa40>, <Element li at 0x2506e48fa80>, <Element a at 0x2506e48fac0>]
- 这里使用*代表匹配所有节点,也就是获取整个HTML文本中的所有节点。
- 从运行结果可以看到,返回形式是一个列表,其中每个元素是Element类型,类型后面跟着节点的名称,如html、body、div、ul、li、a等,所有节点都包含了在列表中。
- 当然,此处匹配也可以指定节点名称。例如想要获取所有li节点,实例如下:
from lxml import etree
html = etree.parse("test.html",etree.HTMLParser())
result = html.xpath('//li')
print(result)
print(result[0])
- 运行结果如下:
[<Element li at 0x1bcfc4cf840>, <Element li at 0x1bcfc4cf880>, <Element li at 0x1bcfc4cf8c0>, <Element li at 0x1bcfc4cf900>, <Element li at 0x1bcfc4cf940>]
<Element li at 0x1bcfc4cf840>
- 可以看到,提取结果也是一个列表,其中每个元素都是Element类型。要想取出其中一个对象,可以直接用中括号加索引获取。
心揣信念,梦想就在脚下!

浙公网安备 33010602011771号