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

使用lxml的selector.xpath()返回空数组,XPath Helper测试正常求解决

问题排查与解决办法

1. 亚马逊反爬导致页面内容不一致

亚马逊会对非浏览器发起的请求做反爬限制,你用requests获取的页面内容大概率和浏览器渲染的页面不一样,这是最核心的原因。可以试试这两个调整:

  • 补充更贴近真实浏览器的请求头,比如添加语言、来源页信息:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36',
        'Accept-Language': 'en-US,en;q=0.9',
        'Referer': 'https://www.amazon.com/'
    }
    
  • 加入浏览器的cookies(从浏览器开发者工具的网络请求里复制),亚马逊会通过cookie识别用户状态,没有有效cookie可能返回简化版页面。

2. 绝对XPath过于脆弱

你用的是全路径的绝对XPath,只要亚马逊微调页面布局(比如增减一个div层级),这个路径就直接失效。换成基于元素属性的相对XPath更稳定,比如通过"Brand"文本定位目标元素:

# 定位标注"Brand"的单元格对应的品牌值
brand = selector.xpath("//th[contains(text(), 'Brand')]/following-sibling::td/span")

3. 浏览器自动生成的tbody标签

多数浏览器会自动给table标签补全tbody,但requests拿到的原始HTML里可能没有这个标签,导致你的XPath因为包含tbody而匹配失败。可以去掉路径里的tbody试试:

brand = selector.xpath('/html/body/div[1]/div[2]/div[6]/div[4]/div[4]/div[36]/div/table/tr[1]/td[2]/span')

验证小技巧

先打印web.text看看返回的页面内容是否和浏览器一致,或者用etree.tostring(selector)输出解析后的HTML,确认目标元素是否真的存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:15:43