Python中XPath按文本定位元素获取对应价格的问题排查
解决Python XPath定位买家并获取对应价格的问题
Hey,我看你这段代码请求网页成功了,但一直提示找不到买家,问题出在几个细节上,我帮你捋一捋:
问题分析
- 节点类型错误:你代码里找的是
<span class="item-price">,但实际网页里价格是用<div class="item-price">包裹的,找span肯定找不到内容 - XPath语法错误:
following-sibling:://span是无效写法,following-sibling轴只能用来定位当前节点的同级节点,不能加//前缀,直接指定节点名称即可 - 买家定位不够精准:直接用
//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
相关产品推荐
相关产品推荐

