我是靠谱客的博主 高挑八宝粥,最近开发中收集的这篇文章主要介绍Xpath库的用法总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

      • 一.初始化
        • 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库的用法总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(192)

评论列表共有 0 条评论

立即
投稿
返回
顶部