【Python爬虫开发基础⑧】XPath库及其基本用法

专栏python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~
往期推荐
【Python爬虫开发基础①】Python基础(变量及其命名规范)
【Python爬虫开发基础②】Python基础(正则表达式)
【Python爬虫开发基础③】Python基础(文件操作方法汇总)
【Python爬虫开发基础④】爬虫原理
【Python爬虫开发基础⑤】HTML页面构成概述
【Python爬虫开发基础⑥】计算机网络基础(Web和HTTP)
【Python爬虫开发基础⑦】urllib库的基本使用
上一篇文章已经介绍了爬虫基础中用到的urllib库的基本使用,但是现在urllib库有很多时候不如requests库方便,所以上篇文章介绍的比较简单。今天,我们来了解一下用的比较多的库:xpath



1 XPath简介

1.1 什么是XPath?

XPath(XML Path Language)是一种用于在HTML和XML文档中定位和选择节点的语言。它提供了一种简洁而强大的方式来对HTML和XML文档进行遍历和操作。

1.2 XPath的作用是什么?

XPath的主要作用在于以下几个方面:

  1. 定位节点:XPath可以通过路径表达式在XML文档中定位指定的节点,无论节点嵌套层级多少,XPath都能准确地找到目标节点。
  2. 选择节点:XPath支持使用条件来筛选符合特定规则的节点,例如根据节点名、属性值、位置等进行选择。
  3. 提取数据:借助XPath,可以从XML文档中提取出特定节点的数据内容,进一步进行处理和分析。

1.3 XPath的基本语法介绍

XPath的基本语法如下:

  1. 路径表达式:XPath使用路径表达式从根节点开始,沿着节点之间的层级关系依次定位目标节点。常见的路径表达式有以下几种形式:
表达式意义
/表示从根节点开始选择。
//表示在整个文档中选择节点。
。(点)表示当前节点。
。。(两个点)表示当前节点的父节点。
nodeName表示选择指定名称的节点。
  1. 谓语(Predicate):谓语用于筛选满足特定条件的节点。它以方括号[]的形式书写在节点选择器后面,包含条件表达式。例如:
表达式意义
[@attrName=‘attrValue’]根据属性值选择节点。
[position()=3]选择位置为第三个的节点。
  1. 通配符:通配符用于匹配任意名字的节点。常见的通配符有以下两种:
表达式意义
*(星号)匹配任意名称的子节点。
@*匹配当前节点的所有属性。

2 Python中的lxml库

lxml是一个功能强大的Python库,用于处理XML和HTML文档。它基于C语言的libxml2和libxslt库,提供了高性能和易用的API。

2.1 lxml库的基本安装方法

通过pip命令可以方便地安装lxml库,具体步骤如下:

pip install lxml

2.2 lxml库中的主要模块介绍

  • lxml.etree

提供了ElementTree API的实现,用于解析、创建和操作XML和HTML文档。常用的类包括ElementTree、Element和XPath。

  • lxml.html

专门用于处理HTML文档的模块。它提供了类似于lxml.etree的API,用于解析、构建和修改HTML文档的DOM树。

  • lxml.cssselect

提供了对CSS选择器的支持,可以根据CSS选择器语法来选择匹配的节点。

  • lxml.sax

提供了使用SAX方式处理XML文档的相关功能。

  • lxml.objectify

提供了一种面向对象的API,用于处理XML数据。

2.3 如何使用lxml库进行XPath查询

  • 首先,导入模块
from lxml import etree
  • 创建ElementTree对象
tree = etree.parse("file.xml")
  • 或者通过字符串创建
tree = etree.fromstring("<root><element>...</element></root>")
  • 使用XPath表达式进行查询:
result = tree.xpath("//element[@attr='value']")
  • 这个例子中,使用XPath表达式//element[@attr='value']选择了具有指定属性值的节点。
  • 最后,处理查询结果:查询结果是一个包含匹配到的节点的列表,可以进一步遍历、提取数据或修改节点。

3 使用XPath提取信息

下面举一个例子,来看一下如何使用lxml库和XPath提取HTML或XML文档中的信息。
假设我们的HTML文档如下所示:

<html>
  <body>
    <div class="container">
      <h1>Welcome to XPath Tutorial</h1>
      <p>XPath is a powerful language for navigating and querying XML or HTML documents.</p>
      <ul class="list">
        <li>Introduction</li>
        <li>Basic Syntax</li>
        <li>Node Selection</li>
        <li>Attribute Selection</li>
      </ul>
    </div>
  </body>
</html>

3.1 如何使用XPath提取HTML或XML文档中的信息

  • 首先,导入模块
from lxml import etree

通过实例演示如何使用XPath提取HTML或XML文档中的信息:

tree = etree.parse("index.html")  # 解析HTML文档
elements = tree.xpath("//h1 | //p | //li")  # 使用XPath选择h1、p和li元素

for element in elements:
    print(element.text)  # 打印元素的文本内容

输出结果:

Welcome to XPath Tutorial
XPath is a powerful language for navigating and querying XML or HTML documents.
Introduction
Basic Syntax
Node Selection
Attribute Selection

以上代码使用XPath选择了h1pli元素,并打印了它们的文本内容。
:“ | ”表示逻辑或的意思

3.2 如何使用XPath定位元素?

可以使用XPath表达式来定位元素。例如,//h1表示选择所有h1元素,/html/body/div表示选择html下的body下的div元素。定位元素的XPath表达式需要根据HTML或XML文档的结构来编写

3.3 如何使用XPath获取元素的属性值?

可以使用XPath表达式在元素后面加上/@属性名来获取元素的属性值。例如,//ul/@class表示获取ul元素的class属性值。

3.4 如何使用XPath遍历元素?

可以使用XPath表达式选择多个元素,并通过循环遍历它们。例如,//li表示选择所有li元素。可以将选择结果存储在一个列表中,然后使用循环来处理每个元素。


下一篇文章我们将利用urllib库和xpath来进行一个简单的实战,感受爬虫的魅力!

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为梦而生~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值