You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确编写XPath?抓取站点地图时XPath选择器无返回求助

站点地图XPath查询无效问题解决方案

核心原因

你遇到的查询无返回问题是XML默认命名空间导致的。标准站点地图的根节点urlset自带http://www.sitemaps.org/schemas/sitemap/0.9的默认命名空间声明,你写的XPath没有指定命名空间,因此无法匹配到对应节点。
Chrome浏览器查看XML时会自动格式化、调整展示结构,和服务器返回的原始内容存在差异,调试时以Scrapy Shell获取的原始响应、火狐浏览器的源码展示内容为准即可。

可用解决方法

方法一:指定命名空间查询(推荐)

Scrapy的XPath支持传入命名空间参数,先为默认命名空间定义别名,再调整XPath语法即可:

# 定义站点地图命名空间别名
ns = {"sm": "http://www.sitemaps.org/schemas/sitemap/0.9"}
# 携带命名空间查询对应节点
result = response.xpath('/sm:urlset/sm:url[1]/sm:loc').get()

该方法完全符合XML查询规范,稳定性最高。

方法二:忽略命名空间匹配

如果不想处理命名空间,也可以用local-name()函数直接匹配节点名称,绕过命名空间限制:

result = response.xpath('/*[local-name()="urlset"]/*[local-name()="url"][1]/*[local-name()="loc"]').get()

内容的提问来源于stack exchange,提问作者Konstantin Pliev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:45:03