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

如何在Scrapy中通过data-number定位并提取对应价格文本?

提取同级label内价格文本的解决方案

问题背景

需要从custom-control/label/font标签内提取价格文本,唯一区分标识是data-number属性(末尾字母为不同控件区块的唯一区分元素)。已获取页面中所有data-number列表:

['025.00286GA', '025.00286GV', '025.00286NWA', '025.00286NW', '025.00286NWV', '025.00286R']

目前可通过以下XPath定位到对应input元素:

//input[contains(@data-number, "' + box_contents[0] + '")]

但input无后代div,需获取其同级label标签内的嵌套价格文本(如€676.05),以下是具体实现方法及优化方案:


一、XPath遍历实现方法

1. 用following-sibling定位后续同级label

如果label在input的同级且位置靠后,直接通过兄弟轴定位:

//input[contains(@data-number, "' + box_contents[0] + '")]/following-sibling::label[1]/font/text()
  • following-sibling::label[1]:选取当前input之后的第一个同级label元素
  • 末尾追加/font/text()直接提取目标价格文本

2. 先找父容器再定位子label

如果input和label同属一个父节点(比如都在custom-control容器内),可先回退到父节点再查找label:

//input[contains(@data-number, "' + box_contents[0] + '")]/../label/font/text()
  • /../:回到input的父节点
  • 再通过/label/font/text()定位到嵌套的价格文本

二、更优方案:直接定位目标label

既然data-number是唯一标识,可跳过input直接关联定位label,减少遍历层级:

//label[../input[contains(@data-number, "' + box_contents[0] + '")]]/font/text()

如果label本身或其直接父节点带有可关联的标识,还能进一步简化XPath,提升定位效率。

另外,在代码循环处理data-number列表时,建议用格式化字符串提升可读性(以Python为例):

for num in box_contents:
    price_xpath = f'//input[contains(@data-number, "{num}")]/following-sibling::label[1]/font/text()'
    price = response.xpath(price_xpath).get()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:05:18