python爬虫系列(九) xpath的基本使用

高手打扰一下,python爬虫系列(九) xpath的基本使用
最新回答
脸红妹妹

2026-10-24 21:55:00

XPath 是一种在 XML 文档中查找信息的语言,Python 中通过 lxml.etree 模块实现其功能。以下是对 XPath 基本使用的详细说明:

一、XPath 简介

XPath 用于在 XML 文档中定位节点,支持通过路径表达式选择节点或节点集。XML 文档由节点构成,常见类型包括:

  • 元素节点:如 <html>、<body>。
  • 属性节点:如 href="/home"。
  • 文本节点:如 Hello world。
  • 根节点:最外层的 <html>。

节点关系包括父子、兄弟、祖先/后代等。XPath 的优势在于比正则表达式(re)更简洁直观,适合解析网页结构化数据。

二、XPath 基本使用步骤1. 安装与导入模块pip install lxmlfrom lxml import etree2. 构造 XML 对象

将网页源代码(字符串)转换为 lxml.etree._Element 对象,自动补全缺失标签:

sc = '''<html> <head> <title>Example website</title> </head> <body> <div id="images"> <a href="image1.html">Image1</a> <a href="image2.html">Image2</a> </div> </body></html>'''html = etree.HTML(sc) # 构造对象print(etree.tostring(html).decode('utf-8')) # 输出补全后的XML3. XPath 匹配语法(1)路径表达式
  • /:子节点test = html.xpath('/html/head/title') # 匹配根节点下的<title>
  • //:后代节点test = html.xpath('//a') # 匹配所有<a>标签
  • *:所有节点test = html.xpath('/html/*') # 匹配<html>下的所有子节点
  • text():文本内容test = html.xpath('//a/text()') # 提取所有<a>标签的文本
  • @ATTR:属性值test = html.xpath('//a/@href') # 提取所有<a>的href属性
(2)谓语(条件筛选)
  • 按位置:test = html.xpath('//a[2]') # 第2个<a>标签test = html.xpath('//a[position()<=2]') # 前2个<a>标签
  • 按属性:test = html.xpath('//a[@href]') # 含href属性的<a>标签test = html.xpath('//a[@href="image1.html"]') # href为指定值的<a>标签test = html.xpath('//a[contains(@href,"image")]') # href包含"image"的<a>标签
4. 处理匹配结果

xpath() 返回字符串或 _Element 对象列表。常用属性和方法:

test = html.xpath('//a[@href="image1.html"]')[0] # 获取第一个匹配项print(test.tag) # 输出标签名:'a'print(test.attrib) # 输出属性字典:{'href': 'image1.html'}print(test.get('href')) # 输出属性值:'image1.html'print(test.text) # 输出文本内容:'Image1'三、示例:提取链接和文本# 提取所有<a>标签的href和文本links = html.xpath('//a/@href') # ['image1.html', 'image2.html']texts = html.xpath('//a/text()') # ['Image1', 'Image2']# 组合提取for href, text in zip(links, texts): print(f"链接: {href}, 文本: {text}")四、注意事项
  1. 路径从根节点开始:/html 表示从根节点 <html> 出发。
  2. 索引从1开始://a[1] 表示第一个 <a> 标签(非0)。
  3. 自动补全标签:lxml.etree 会修复不规范的 XML(如未闭合标签)。
  4. 复杂查询:可组合表达式,如 //div[@id="images"]/a[1]/@href。

通过以上步骤,可以高效利用 XPath 解析网页结构,提取所需数据。