normalize-space() 是 XPath 中用于清理空白字符的函数,它去除首尾空白并将中间连续空白压缩为单个空格,适用于文本提取、属性匹配及多节点拼接等场景。

normalize-space() 是 XPath 里专门对付“乱空格”的实用函数,核心就两件事:砍掉开头和结尾的所有空白(包括空格、换行 \n、制表符 \t、回车 \r),再把中间一串连着的空白压缩成一个普通空格。
清理文本内容,避免换行缩进干扰
HTML 中的文本常因排版需要带大量 \n\t,直接取 text() 会得到像 "\n\t Hello World \n" 这样的结果。用 normalize-space() 后就变成 "Hello World" —— 干净、可读、方便后续处理。
- 错误写法:
response.xpath('//div[@class="title"]/text()')→ 可能返回 ['\n ', '产品名称', '\n '] - 推荐写法:
response.xpath('normalize-space(//div[@class="title"]/text())')→ 直接得 "产品名称"
精准匹配带空格的属性或文本
有些元素的 class、title 等属性值前后有空格,或者中间多个空格不一致,用等号匹配会失败。normalize-space() 可先标准化再比较。
Android 基础知识入门 pdf,介绍什么是Android、Android可以完成的功能、Android架构、Android应用程序框架、Android函数库等,从开始安装Android开始,到环境配置,到一步步编写复杂的应用程序,本书将带你了解基础但有内涵的Android入门知识。
- 原始 class 值可能是 " active " 或 "new item"(两个空格)
- 写成
//button[normalize-space(@class)='active']就能稳稳命中 - 同理,
//span[normalize-space(text())='确认提交']不怕按钮文字前后有缩进
配合 string() 或多节点拼接时统一格式
当用 string(//div) 提取整块内容,或拼接多个 text() 节点时,容易混入多余空白。套一层 normalize-space() 就能一步规整。
- 比如:
normalize-space(string(//article))→ 整篇文章文本变单行、无首尾杂空 - 又如:
normalize-space(//p[1]/text() | //p[2]/text())→ 把两段文字自然拼一起,中间只留一个空格
基本上就这些。不复杂但容易忽略,加个 normalize-space() 往往就能让爬虫提取更稳、匹配更准。









