一.安装
pip3 install lxml
二.导入与实例化
导入
from lxml import etree
实例化
html=etree.parse(fliepath)
- 网页对象(page_text为requests请求获得)
html=etree.HTML(page_text)
三.XPath规则
代码实例
page_text='''
'''
1.所有节点
result=html.xpath('//*')
#运行结果
[, , , , , , , , , , , , , ]
2.子节点
2.1 子孙节点
result=html.xapth('//li')
#运行结果
[, , , , ]
2.2 直接子节点
result=html.xapth('//li/a')
#运行结果
[, , , , ]
3.父节点
result=html.xpath('//li[@class="item-0"]/..')
result=html.xpath('//div[@class="mb-nav"]/parent::*')
#运行结果
[]
4.文本获取
result=html.xpath('//li[@class="item-0"]/text()')
#运行结果
['\n ']
result=html.xpath('//li[@class="item-0"]//text()')
#运行结果
['first item', 'fifth item', '\n ']
result=html.xpath('//li[@class="item-0"]//text()')[0]
#运行结果
first item
result=html.xpath('//a[@href="link1.html"]/text()')
#运行结果
['first item']
result=html.xpath('//a[@href="link1.html"]/text()')[0]
#运行结果
first item
5.属性匹配
result=html.xpath('//li[@class="item-0"]')
#运行结果
[, ]
6.属性多值匹配
- 1个属性多个值时使用contais
- contais(@属性名称href,"属性值link1.html或link11.html")
#实例
first item
result=html.xpath('//a[contains(@href,"link11.html")]/text()')
#运行结果
['first item']
7.多属性匹配
#实例
first item
result=html.xpath('//a[contains(@href,"link11.html") and @name="href"]/text()')
#运行结果
['first item']
8.属性获取
- 注意与属性匹配的区别:属性匹配 a[@href="link1.html"] —— 获取属性 a/@href
result=html.xpath('//li/a/@href')
#运行结果
['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
9.按序选择
result=html.xpath('//li[1]//text()')
#运行结果
['first item']
result=html.xpath('//li[last()]//text()')
#运行结果
['fifth item', '\n ']
result=html.xpath('//li[position()<3]//text()')
#运行结果
['first item', 'second item']
result=html.xpath('//li[last()-2]//text()')
#运行结果
['third item']
10.节点轴选择
10.1 获取所有祖先节点
result=html.xpath('//li[1]/ancestor::*')
#运行结果
[, , , ]
10.2 获取特定祖先节点
result=html.xpath('//li/ancestor::ul')
#运行结果
[]
10.3 获取所有属性值
result=html.xpath('//li/attribute::*')
#运行结果
['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']
10.4 获取所有子节点
result=html.xpath('//li/child::*')
#运行结果
[, , , , ]
10.5 获取特定子节点
result=html.xpath('//li/child::a[@href="link2.html"]')
#运行结果
[]
10.6 获取所有子孙节点
result=html.xpath('//ul/descendant::*')
#运行结果
[, , , , , , , , , , ]
10.7 获取特定子孙节点
result=html.xpath('//ul/descendant::li')
#运行结果
[, , , , ]
10.8 获取当前节点之后的节点
result=html.xpath('//li[1]/following::*[2]')
#运行结果
[]
10.9 获取当前节点之后的所有同级节点
result=html.xpath('//li[1]/following-sibling::*')
#运行结果
[, , , ]