如何编写Scrapy CSS选择器提取td下p标签中的金额数值
如何用Scrapy提取HTML中p标签内的金额数值?
步骤1:先获取p标签的文本内容
你当前的CSS选择器获取的是整个p元素,需要修改选择器来提取标签内的文本:
# 获取p标签的文本内容 p_text = response.css("#__next > div > div:nth-child(2) > div > div.data-table_container__pPKXQ > table > tbody > tr:nth-child(1) > td:nth-child(3) > p:nth-child(1)::text").get() # 如果p标签内有多个分散的文本节点(比如混有其他子标签),用getall()拼接完整文本 p_text = ''.join(response.css("#__next > div > div:nth-child(2) > div > div.data-table_container__pPKXQ > table > tbody > tr:nth-child(1) > td:nth-child(3) > p:nth-child(1)::text").getall()).strip()
步骤2:从文本中提取金额数值
根据p标签文本的实际格式,选择对应的提取方式:
正则表达式提取通用数字(支持整数/小数)
适用于金额带符号(如¥、$、元)或混杂其他描述文字的场景:import re if p_text: # 匹配数字部分,兼容整数和小数格式 amount_match = re.search(r'\d+\.?\d*', p_text) if amount_match: amount = amount_match.group() # 如需转为数值类型 amount_float = float(amount)字符串分割提取(适用于固定格式文本)
如果文本格式固定(比如"订单金额:123.45元"),可以直接通过分割和替换处理:if p_text: # 按固定前缀分割,再去除后缀单位 amount = p_text.split("订单金额:")[-1].replace("元", "").strip()
额外提示
如果金额是嵌套在p标签的子标签(如<span>)里,需要调整CSS选择器直接定位到子标签的文本,例如:
# 假设金额在p标签下的span元素内 amount_text = response.css("#__next > div > div:nth-child(2) > div > div.data-table_container__pPKXQ > table > tbody > tr:nth-child(1) > td:nth-child(3) > p:nth-child(1) span::text").get()
内容的提问来源于stack exchange,提问作者Sarthak Bhatore
相关产品推荐
相关产品推荐

