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

如何使用XPath提取以:开头的属性并获取其中的pzn、url值?

问题原因

你之前的XPath表达式报错,是因为属性名包含特殊字符:,不能直接用@":variants"的写法调用,需要通过属性名匹配的方式定位该属性。另外提取到的属性值是类JSON格式,不符合标准JSON规范,需要先做格式兼容处理才能解析。

解决步骤

1 正确提取:variants属性值

使用name()匹配属性名获取对应值:

variants_raw = response.xpath('.//div[contains(@class, "productAddToCartPanel")]//app-add-to-cart-form/@*[name()=":variants"]').extract_first()

2 处理非标准JSON格式

提取到的原始内容键无引号、值用单引号包裹,可通过字符串替换转成标准JSON:

import json

# 替换单引号为双引号,给键名加双引号
variants_str = variants_raw.replace("'", '"').replace('pzn:', '"pzn":').replace('url:', '"url":').replace('packageSizeValue:', '"packageSizeValue":').replace('packageSizeUnit:', '"packageSizeUnit":').replace('sizeValue:', '"sizeValue":').replace('potency:', '"potency":')
# 去掉末尾多余的逗号
variants_str = variants_str.rstrip(',')
# 解析为Python列表
variants_list = json.loads(variants_str)

可选兼容方案:如果不想手动处理格式,可使用宽松JSON解析库demjson(需提前执行pip install demjson安装):

import demjson
variants_list = demjson.decode(variants_raw)

3 提取pzn和url

遍历解析后的列表即可拿到对应值:

result = []
for item in variants_list:
    result.append({
        "pzn": item["pzn"],
        "url": item["url"]
    })
print(result)

输出示例

[
    {"pzn": "09900426", "url": "/online-kaufen/bio-h-tin-vit-h-25mg-4woc-tabletten-9900426"},
    {"pzn": "09900432", "url": "/online-kaufen/bio-h-tin-vit-h-25mg-12wo-tabletten-9900432"},
    {"pzn": "09900455", "url": "/online-kaufen/bio-h-tin-vit-h-25mg-2x12-tabletten-9900455"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:15:03