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() 可先标准化再比较。
//button[normalize-space(@class)='active'] 就能稳稳命中//span[normalize-space(text())='确认提交'] 不怕按钮文字前后有缩进当用 string(//div) 提取整块内容,或拼接多个 text() 节点时,容易混入多余空白。套一层 normalize-space() 就能一步规整。
normalize-space(string(//article)) → 整篇文章文本变单行、无首尾杂空normalize-space(//p[1]/text() | //p[2]/text()) → 把两段文字自然拼一起,中间只留一个空格基本上就这些。不复杂但容易忽略,加个 normalize-space() 往往就能让爬虫提取更稳、匹配更准。