首页 > 其他分享 >xpath语法基本使用

xpath语法基本使用

时间:2022-10-04 08:33:25浏览次数:49  
标签:xpath 基本 语法 html print div data 节点

from lxml import etree

"""
lxml是html(超文本标记语言,显示数据)和xml(可扩展标记语言,传输和存储数据)文档的解析器,当我们使用需要用到css选择器或xpath来获取数据时用于
html文本解析成树形结构  在解析的过程中如要到html代码不规范或不完整的话,lxml会自动修复从而提高解析效率
"""

html_txt = """
<body>
<div>
<ul><li><a>1</a></li><li class="me kk"><a>2</a></li></ul>
<ul><li><a>3</a></li><li><a>4</a></li></ul>
</div>
<div>
<ul name="meme"><li><a>5</a></li><li name="me"><a>6</a></li></ul>
<ul><li><a>7</a></li><li><a>8</a></li></ul>
</div>
</body>
"""
html = etree.HTML(html_txt)
# 返回的是一个元素对象
print(html)
# 将解析后的html转为字符串输出(tostring()输出的是bytes类,后面需要调用decode()方法将其转为str)
print(etree.tostring(html).decode("utf-8"))
# / 代表从当前节点选取直接子节点  建议单斜杠前带有元素标签,不要使用html标签  不要已单斜杠结尾,会报xpath的表达式错误
# 1
"""
data = html.xpath("body/div/ul/li")
print(data)
for d in data:
    a_txt = d.xpath("a")
    print(a_txt[0])
"""
# 2
data = html.xpath("body/div/ul/li/a")
# 返回a元素对象列表
print(data)
for a in data:
    # 返回a元素中的值
    print(a.text)

# // 代表从当前节点选取直接子孙节点  双斜杠开头表示所有子孙节点(相当于全文搜索);双斜杠前带有元素标签表示该元素下的所有子孙节点
# 1  "//*" 匹配所有子孙节点
data = html.xpath("//li[@name='me']")
data = data[0].xpath("a")
print(data[0].text)
# 2
data = html.xpath("body/div//a")
for a in data:
    print(a.text)

# .. 代表选取当前节点的父节点
data1 = html.xpath("//li[@name='me']/..")
data2 = html.xpath("//li[@name='me']/../@name")
data3 = html.xpath("//li[@name='me']/a/text()")  # 在xpath中使用text方法时建议统一在最里层的元素节点下使用
print(data1, data2, data3)

# 属性多值匹配
data = html.xpath("//li[contains(@class, 'kk')]/a")
print(data, data[0].text)

# 按序选择   在选择节点时可能会匹配到多个节点,如想要其中一个可通过索引的方式来获取  注意索引的序号已1开头不是0
data = html.xpath("body/div/ul")
print(data)
data1 = html.xpath("body/div/ul[1]")
print(data1)
data2 = html.xpath("body/div/ul[last()]")
print(data2)
data3 = html.xpath("body/div/ul[position()=2]")  # div节点下第二个ul
print(data3)
data4 = html.xpath("body/div/ul[last()-1]")  # div节点下倒数第二个ul
print(data4)

"""
以上是xpath语法的基本使用,如不满足需求可前往中文手册查看教程 http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
"""

 

标签:xpath,基本,语法,html,print,div,data,节点
From: https://www.cnblogs.com/li-han-qiang/p/16753139.html

相关文章

  • JWT详解与基本使用(保姆教程)
    前言:最近准备写一篇关于security前后端分离场景下的认证与授权文章,里面使用到了jwt,所以就写了一篇jwt的文章,作为开头小菜......
  • 排序的基本复杂度
      .排序算法时间复杂度稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中......
  • 广义表中表头和表尾基本知识
    广义表((a,b),c,d)表头和表尾分别是什么? 公式:(1)表头:当广义表LS非空时,称第一个元素为LS的表头;(2)表尾:称广义表LS中除去表头后其余元素组成的广义表为LS的表尾。区别:表头是元......
  • uniapp + vue3糖果语法实现瀑布流商品列表
    目录效果思路实现先将列表分为两个HTML中使用左右列表进行显示完整代码效果思路瀑布流其实就是将放放商品信息列表展示的view分为了左右两个部分,然后固定了两个部分的......
  • Spring Cloud:第一章:基本介绍
    SpringCloud中文网SpringCloud是什么?SpringCloud是一系列框架的有序集合,将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。SpringCloud......
  • Python语法之集合
    集合是无序元素的集合,集合中的元素不可重复,并且创建完成后,其中的元素不可更改。但是整个集合是可以更改的,我们可以向其增加元素,也可以从中删除元素。也就是说,我们无法修改......
  • Markdowm 的一些常用语法
    Markdowm的一些常用语法声明(叠甲):鄙人水平有限,本文章仅供参考。且本文章是一个不全的分享,只有我目前用的比较多的语法,如果有什么错误,欢迎大家指正。具体可以查看该网......
  • Python SQLite3 基本操作类
    #!/usr/bin/envpython#encoding:utf-8"""@version:v1.0@author:W_H_J@license:ApacheLicence@contact:[email protected]@software:PyCharm@f......
  • 模糊测试基本概念FuzzTest
    fuzztest1.whatisFUZZTESTing?FuzzTestingisanautomatedsoftwaretestingtechnology,originallydevelopedbyBartonMilleroftheUniversityofWiscons......
  • Lua-基本语法
    Lua作为动态语言,变量定义的时候不需要声明类型。Lua数据类型--nil表示一个无效值,在条件判断语句中表示false.--boolean表示false和true.--number数值,无论是浮点......