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

BS4与XML中XPath选择器失效:无法获取NFT排名数据

解决Zapper.fi NFT排名数据获取失败的问题

问题原因

Zapper.fi是单页应用(SPA),页面内容通过JavaScript动态渲染。你用requests获取的是静态HTML源码,里面并没有包含NFT排名这类需要动态加载的数据,所以XPath查询自然返回空列表。

解决方案

方法1:调用Zapper的官方API(推荐)

直接通过API请求获取数据,比爬页面更高效稳定。你可以在浏览器开发者工具的「网络」标签里,筛选XHR请求,找到返回NFT详情的接口。示例代码如下:

import requests

# 替换为实际找到的API端点
api_url = "https://api.zapper.fi/v2/nft/ethereum/0x2a6eec51ee67a941fa50c1fbc4ca8853604461b8/616"
headers = {
    "Accept": "application/json",
    "Authorization": "Bearer YOUR_API_KEY"  # 部分接口需要API密钥,可在Zapper开发者平台申请
}

response = requests.get(api_url, headers=headers)
data = response.json()
rank = data.get("rank")  # 根据实际返回的JSON结构调整字段名
print(rank)

注意:部分Zapper API需要申请API密钥,请求时需携带Authorization头,具体可参考Zapper官方开发者指引。

方法2:用Selenium模拟浏览器加载页面

如果不想处理API认证,可以用Selenium模拟浏览器打开页面,等待动态内容加载完成后再提取数据:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://zapper.fi/nft/ethereum/0x2a6eec51ee67a941fa50c1fbc4ca8853604461b8/616'

# 初始化Chrome浏览器(需提前下载对应版本的chromedriver)
driver = webdriver.Chrome()
driver.get(url)

# 等待排名元素加载完成,超时时间10秒
wait = WebDriverWait(driver, 10)
rank_element = wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div[2]/div[3]/main/div/div/div/div/div[2]/div[1]/div[2]/div[2]/div[1]/div[2]')))

rank = rank_element.text
print(rank)

driver.quit()

注意:需要先安装Selenium库(pip install selenium),并确保浏览器驱动版本与本地浏览器版本匹配。

额外提示

  • 避免使用绝对XPath(如/html/body/div[1]/...),这类路径极易因页面结构变化失效,建议改用相对XPath或CSS选择器,比如根据元素的class属性定位://div[contains(@class, 'rank-value')](需根据实际页面class调整)。
  • 频繁爬取可能触发网站反爬机制,建议添加请求间隔,遵守网站的robots.txt规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:10:44