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

Python中XPath按文本定位元素获取对应价格的问题排查

解决Python XPath定位买家并获取对应价格的问题

Hey,我看你这段代码请求网页成功了,但一直提示找不到买家,问题出在几个细节上,我帮你捋一捋:


问题分析

  1. 节点类型错误:你代码里找的是<span class="item-price">,但实际网页里价格是用<div class="item-price">包裹的,找span肯定找不到内容
  2. XPath语法错误:following-sibling:://span 是无效写法,following-sibling轴只能用来定位当前节点的同级节点,不能加//前缀,直接指定节点名称即可
  3. 买家定位不够精准:直接用//div[contains(text(),"XXX")]可能会匹配到页面中其他包含该文本的div,最好加上buyer-name这个class属性来限定范围

修正后的代码

我把这些问题都修复了,还优化了异常处理和结果输出:

import requests
from lxml import html

def getprice(search_buyer):
    try:
        url = 'http://econpy.pythonanywhere.com/ex/001.html'
        response = requests.get(url)
        print(response)
        tree = html.fromstring(response.content)
        # 精准定位买家节点,再获取同级的价格节点文本
        prices = tree.xpath(f'//div[@class="buyer-name" and contains(text(), "{search_buyer}")]/following-sibling::div[@class="item-price"]/text()')
        
        if prices:
            for price in prices:
                print(f"Found price for {search_buyer}: {price.strip()}")
        else:
            print(f"No buyer found with name: {search_buyer}")
    except Exception as e:
        print(f"An error occurred: {str(e)}")

getprice("Ben D. Rules")

代码说明

  • 修正了XPath:先通过@class="buyer-name"精准定位买家的div,再用following-sibling::div[@class="item-price"]获取同级的价格div
  • 直接提取文本:XPath末尾加/text(),直接拿到价格的文本内容,不用再遍历元素处理
  • 完善逻辑:先判断是否找到结果,再输出对应的信息,异常捕获也会打印具体错误,方便排查其他问题

运行这段代码后,应该会输出:

<Response [200]>
Found price for Ben D. Rules: $9.95

内容的提问来源于stack exchange,提问作者Joji k joy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:30:59