当前位置: 首页 > news >正文

Python 轻量级 HTML 解析器 - lxml入门教程

文章目录

    • 初始化解析器
    • 路径查找
      • 查找所有标签
      • 查找指定 id 的标签
      • 查找指定 class 的标签
      • 查找包含指定 class 的标签
      • 复杂路径查找
        • 示例1
        • 示例2
    • 常见操作
      • 获取所有标签的链接
      • 获取 div 标签的文本内容, 其他标签类似
      • 其他元素操作

初始化解析器


from lxml import html
from lxml.html import HtmlElementpage = '''
<html><head></head>
<body><div id="overlay" class="hidden"><div id="loader"></div></div><header id="rootHeader" class="login"><div class="wrapper content login"><table width="186" border="0"></table><div class="login">example content</div><a href="https://www.example.com">Torrent Kitty - Free Torrent To Magnet Link Conversion Service</a></div></header><div class="becbdbcf otherClassName">Your Internet and Goverment can track your torrent Activity! Hide yourIP with a VPN!</div><a href="https://example.com">Torrent Kitty - Free Torrent To Magnet Link Conversion Service</a>
</body></html>
'''rootElement: HtmlElement = html.fromstring(page)# 简单查找,获取指定类别的所有标签elements: list[HtmlElement] = rootElement.find_class('login')
print(elements)

路径查找

  • HtmlElement.xpath(‘xxxxxxxxxxxxxxxx’)

如果匹配不到元素返回空数组

查找所有标签


elements = rootElement.xpath('//*')
print(elements)

查找指定 id 的标签


elements = rootElement.xpath('//*[@id="overlay"]')
print(elements)

查找指定 class 的标签


elements = rootElement.xpath('//*[@class="login"]')
print(elements)

查找包含指定 class 的标签


elements = rootElement.xpath('//*[contains(@class, "login")]')
print(elements)

复杂路径查找

示例1

1、查找 class 为login 的 header
2、在 header 下查找 class 包含content的 div
3、在 div 下查找所有 table 标签


elements = rootElement.xpath('//header[@class="login"]/div[contains(@class, "content")]/table')
print(elements)
示例2

1、查找 id 为overlay 的 div
2、在 div 下查找第二个 div
3、在第二个 div 下查找所有 table 标签


elements = rootElement.xpath('//div[@id="overlay"]/div[2]/table')
print(elements)

常见操作

获取所有标签的链接


# 如果想获取其他属性值,把@后面改成对应的属性名称即可
urls = rootElement.xpath('//a/@href') 
print(urls)

获取 div 标签的文本内容, 其他标签类似


pText = rootElement.xpath('//div[@class="login"]/text()')
print(pText)

其他元素操作


elements = rootElement.xpath('//*')
for element in elements:print(element.text) # 文本不拼接(不包含子元素内的文本)print(element.text_content()) # 拼接元素内所有文本 # 获取 class 的值,如果想获取其他属性值改成对应属性名称即可# 使用get获取,如果没有值可以提供默认值print(element.get('class', '没有值')) # print(element.get('class'))  # 获取所有属性,类型 dict, key为属性名,value为属性值print(element.attrib) if 'src' in element.attrib:print('src 属性存在')# 遍历属性attrib = element.attribfor key in attrib: print(key, attrib[key])items = element.find('div')print(items) # 获取element下的所有 div 标签# 在 element 下查找所有 table 标签items = element.xpath('table') print(items)# 在 element 下查找 id 为 overlay 的标签, 如果找不到返回 Noneitems = element.get_element_by_id('overlay', None) print(items)
http://www.dtcms.com/a/356192.html

相关文章:

  • Java研学-SpringCloud(十)
  • Android14 init.qcom.usb.rc详解
  • 设计模式之状态机模式
  • hive udf函数实现在sql查询网站价格
  • Vue3 中的 v-model 语法糖
  • (Nginx)基于Nginx+PHP 驱动 Web 应用(上):配置文件与虚拟主机篇
  • 基于SQL大型数据库的智能问答系统优化
  • 安卓开发---SimpleAdapter
  • 不同卷积不同的滤波效果
  • 如何将OFD文件转换为PDF?总结在线OFD转PDF方法
  • QT5.14.2、CMake 扩展openCV
  • GPT-5原理
  • 第二章 Vue + Three.js 实现鼠标拖拽旋转 3D 立方体交互实践
  • Python- Visual Studio Code配置Anaconda
  • WebIDEPLOY 赋能数字校园建设:智慧管理系统的效能升级与实践路径 —— 以校园资源协同优化构建高效教育生态的探索
  • 洞悉核心,驭数而行:深入理解 Oracle SQL 优化器(RBO 与 CBO)的性能调优哲学
  • C# 一个投资跟踪程序的设计与实现:面向对象与设计模式的深度解析
  • ros、slam、激光雷达、自动驾驶相关学习内容和计划
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day15
  • PyTorch 机器学习基础(选择合适优化器)
  • 【Big Data】Alluxio 首个基于云的数据分析和开源AI数据编排技术
  • 补题报告08
  • 从零开始的云计算生活——第五十四天,悬梁刺股,kubernetes模块之组件与网络
  • 计算机是如何运行的
  • Kotlin 和 Java 的区别
  • 【Linux系统】线程控制
  • 《C++进阶之STL》【AVL树】
  • PlotJuggler如何安装和使用
  • JavaSE丨集合框架入门(二):从 0 掌握 Set 集合
  • DeepSeek大模型风靡云平台,百度智能云、阿里云、腾讯云等多个平台宣布上线DeepSeek模型