Python爬虫lxml模块安装导入和xpath基本语法

lxml模块是Python的一个解析库,主要用于解析HTML和XML文件。

一、安装导入

使用包管理器安装,在cmd下或编辑器下的控制台,运行:

复制代码
pip install lxml

导入:

复制代码
from lxml import etree

二、xpath基础知识

XPath(XML Path Language,即XML路径语言)是一种在XML文档中查找信息的语言。它基于XML的树状结构,使用路径表达式来选取XML文档中的节点或节点集

  • //:代表寻找所有(如://div,找到的就是页面所有的div标签)
  • /:代表从根节点找一个
  • @:寻找属性(如://div[@class='123'],找到的是所有class属性值为123的标签)

也可以寻找属性值://div/@class。找到的是所有div的class属性值

可以结合节点选择器使用,如 //book[@price>35] 表示选择所有 price 属性值大于35的 book 元素。

  • 当前节点:使用点 . 表示选取当前节点。
  • 父节点:使用两个点 .. 表示选取当前节点的父节点。
  • * 匹配任何元素名。例如,//* 表示选择文档中的所有元素。
  • @* 匹配任何属性名。例如,//book[@*] 表示选择所有具有至少一个属性的 book 元素。
  • 谓词用于进一步筛选满足条件的节点,它被嵌在方括号 [] 中。例如,/root/child[1] 表示选择 root 元素的第一个 child 子元素。
  • 谓词可以使用比较运算符(如 =!=<> 等)、逻辑运算符(如 andornot)和XPath函数(如 last()position()starts-with()contains() 等)。
  • child:: 选择当前节点的子元素节点。
  • attribute:: 选择当前节点的属性。
  • descendant:: 选择当前节点的所有后代节点。
  • parent:: 选择当前节点的父节点。
  • ancestor:: 选择当前节点的所有祖先节点。
  • following-sibling:: 选择当前节点之后的同级节点。
  • preceding-sibling:: 选择当前节点之前的同级节点

三、案例

比如我们有一个数据:

python 复制代码
html_data = '''
<div>
  <ul>
       <li class="item-0"><a href="link1.html">first item</a></li>
       <li class="item-1"><a href="link2.html">second item</a></li>
       <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
       <li class="item-1"><a href="link4.html">fourth item</a></li>
       <li class="item-0"><a href="link5.html">fifth item</a>
   </ul>
</div>
'''

我们可以看出,这个数据并不是一个完整的html的结构,但是,xpath需要通过结构路径寻找节点,所以我们需要补全结构,而且要把这个数据解析为element对象才可以通过xpath对其操作,所以我们用到以下语法:

python 复制代码
html=etree.HTML(html_data)

etree.HTML():将字符串形式的HTML代码解析为Element对象。该函数会自动补全缺失的标签,并尝试修正HTML代码中的错误。括号中是要解析的数据,html是他解析后返回的element对象。

接下来我们就可以对这个数据进行操作了

案例1:

拿到第二个li的class值:

python 复制代码
html.xpath("//li[2]/@class")

案例2:

拿到最后一个li的a标签的href属性值:

python 复制代码
html.xpath("//li[last()]/a/@href")

案例3:

复制代码
根据属性值获取元素内容
python 复制代码
html.xpath("//li/a[@href='link1.html']/text()")
相关推荐
万邦科技Lafite14 分钟前
利用淘宝开放API接口监控商品状态,掌握第一信息
大数据·python·电商开放平台·开放api接口·淘宝开放平台
Hy行者勇哥2 小时前
Python 与 VS Code 结合操作指南
开发语言·python
大力水手(Popeye)2 小时前
Pytorch——tensor
人工智能·pytorch·python
飞翔的佩奇6 小时前
【完整源码+数据集+部署教程】表盘指针检测系统源码和数据集:改进yolo11-CA-HSFPN
python·yolo·计算机视觉·数据集·yolo11·表盘指针检测
larance7 小时前
SQLAlchemy 的异步操作来批量保存对象列表
数据库·python
搏博7 小时前
基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程
windows·python·自然语言处理·flask·中文分词
麦兜*8 小时前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
lxmyzzs8 小时前
pyqt5无法显示opencv绘制文本和掩码信息
python·qt·opencv
萧鼎9 小时前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python
艾伦~耶格尔10 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试