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()")
相关推荐
cdut_suye3 分钟前
STL之list篇(上)初识list容器,了解其核心机制,实例化对象进行分析
开发语言·c++·学习·算法·stl·list
南宫理的日知录5 分钟前
84、Python之鸭子类型:魔术方法&自定义类型也可以实现加减乘除
开发语言·python·学习·编程学习
界面开发小八哥6 分钟前
「Qt Widget中文示例指南」如何实现一个平板电脑示例?(一)
开发语言·c++·qt·界面控件·ui开发
吃点李子7 分钟前
QQ机器人搭建
python·机器人
AI算法董同学12 分钟前
VS Code 配置 Anaconda Python 环境
开发语言·windows·vscode·python·编辑器
deephub19 分钟前
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
人工智能·python·机器学习·numpy·sklearn·特征工程
s_little_monster20 分钟前
【C++】继承(下)
开发语言·c++·经验分享·笔记·学习·学习方法
林九生22 分钟前
【Golang】(推荐项目)Go后端工程项目
开发语言·后端·golang
聪根大牛成长日记!23 分钟前
STL容器之----string的常见接口介绍及模拟实现部分接口(c++)
开发语言·c++
重生成为码农‍24 分钟前
Java高级Day52-BasicDAO
java·开发语言·windows