概述
文章目录
- 一.初始化
- 1.读取字符串初始化
- 2.读取文本文件初始化
- 二.查找节点
- A.标签匹配
- 1.所有节点: //* 可通过下标索引选择对应的节点
- 2.选取特定子节点: //li/a //li//a ; /只用于获取子节点, //用于获取所有子孙节点
- B.属性匹配
- 1.属性匹配
- 2.属性多值匹配:通过contains(@class,"key")即可筛选出包含key的标签
- 3.多属性匹配:若多个属性匹配一个节点,可以通过and来并列,如@class="item-0" and @name="li"
- C.关系匹配
- 1.按序选择节点: [1]:选择第一个节点, [last( )]:选择最后一个节点, [position() < 3 ]:前两个节点
- 2.选取父节点:使用..或者parent::
- 3.节点轴选择
- 三.获取信息
- 1.获取文本:不会获得html标签文本,且使用/只会获得当前标签内的字符串, //会获得该标签子孙内的所有字符串
- 2.属性获取:直接加上/@class即可获得当前标签的属性值
一.初始化
1.读取字符串初始化
from lxml import etree
text = '''
<div class='wrap'>
<div id='container'>
<ul class='list'>
<li class="item-0">first item</li>
<li class="item-1">this is a li<a href="link2.html">second item</a></li>
<li class="item-0 active">this is a li<a href="link3.html">third item</a></li>
<li class="item-1 active" name="li">this is a li<a href="link4.html">third item</a></li>
</ul>
</div>
</div>
<div id='container'>
<ul class='list'>
<li class="item-3">first item</li>
<li class="item-4">second item</li>
</ul>
</div>
'''
print("读取字符串")
# 将text的HTML文本构造成一个xpath对象
html = etree.HTML(text)
# 对html文本进行修正,生成为一个标准的html格式文本
result = etree.tostring(html)
# 输出文本,由于修正后的html文本是比特类型的,需要进行编码,为str类型
print(result.decode('utf-8'))
2.读取文本文件初始化
print("读取文本文件")
html = etree.parse('text.html', etree.HTMLParser())
result = etree.tostring(html)
print(result.decode('utf-8'))
二.查找节点
A.标签匹配
1.所有节点: //* 可通过下标索引选择对应的节点
print("所有节点")
result = html.xpath('//*')
print(result)
2.选取特定子节点: //li/a //li//a ; /只用于获取子节点, //用于获取所有子孙节点
print("选取子节点")
result = html.xpath('//li/a')
print(result)
B.属性匹配
1.属性匹配
print("属性匹配")
result = html.xpath('//li[@class="item-0"]')
print(result)
2.属性多值匹配:通过contains(@class,“key”)即可筛选出包含key的标签
print("属性多值匹配")
result = html.xpath('//li[contains(@class,"item-1")]')
print(result)
3.多属性匹配:若多个属性匹配一个节点,可以通过and来并列,如@class=“item-0” and @name=“li”
print("多属性匹配一个节点")
result = html.xpath('//li[contains(@class,"item-1") and @name="li"]//text()')
print(result)
C.关系匹配
1.按序选择节点: [1]:选择第一个节点, [last( )]:选择最后一个节点, [position() < 3 ]:前两个节点
# 会选择同一级别相应位置的所有节点
print("按序选择节点")
result = html.xpath('//li[position()<3]/text()')
print(result)
2.选取父节点:使用…或者parent::
print("选取父节点")
result1 = html.xpath('//a[@href="link4.html"]/../@class')
result2 = html.xpath('//a[@href="link4.html"]/parent::*/@class')
print(result1, result2)
3.节点轴选择
# ancestor:所有祖先节点
print("祖先节点")
result = html.xpath('//li[1]/ancestor::div[@id="container1"]')
print(result)
# attribute:所有属性
print("所有属性")
result = html.xpath('//li[1]/attribute::*')
print(result)
# child:所有的直接子节点
print("所有的直接节点")
result = html.xpath('//li[2]/child::*')
print(result)
# descendant:所有的子孙节点
print("所有子孙节点")
result = html.xpath('//ul/descendant::a/text()')
# //ul只会选择第一个ul,而li[1]会选择同级别所有第一个li标签
print(result)
# following:当前节点后的所有节点
print("当前节点后的所有节点")
result = html.xpath('//li[1]/following::*/text()')
print(result)
# following-sibling:当前节点后所有同级节点
print("当前节点后的所有节点")
result = html.xpath('//li[1]/following-sibling::*//text()')
print(result)
三.获取信息
1.获取文本:不会获得html标签文本,且使用/只会获得当前标签内的字符串, //会获得该标签子孙内的所有字符串
print("获取文本")
result = html.xpath('//li[@class="item-1"]/text()')
print(result)
2.属性获取:直接加上/@class即可获得当前标签的属性值
print("属性获取")
result = html.xpath('//div[@id="container1"]//li/@class')
print(result)
最后
以上就是高挑八宝粥为你收集整理的Xpath库的用法总结的全部内容,希望文章能够帮你解决Xpath库的用法总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复