import json
import time
import requests
def account_nfts(account_address, api_key):
# 初始API接口URL(包含next参数)
url = f"https://api.opensea.io/v2/chain/ethereum/account/{account_address}/nfts?limit=50"
# 总的nft数量
total_count = 0
headers = {
"accept": "application/json",
"X-API-KEY": api_key
}
while url:
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
# 提取NFT列表或其他您需要的数据
nfts = data.get("nfts", [])
current_page_count = len(nfts)
total_count += current_page_count
for nft in nfts:
print(f"NFT名称: {nft['name']}")
print(f"NFT合同地址: {nft['contract']}")
print(f"NFT图像URL: {nft['image_url']}")
# 获取下一页的游标,如果没有下一页,cursor将为None
next_cursor = data.get("next")
# 更新URL以获取下一页
if next_cursor:
# 更新URL以获取下一页
url = f"https://api.opensea.io/v2/chain/ethereum/account/{account_address}/nfts?limit=50"
url += f"&next={next_cursor}"
else:
# 如果next_cursor为None,停止爬取
break
time.sleep(1)
elif response.status_code == 429:
# 如果收到429错误,等待一段时间再重试
print("收到429错误,等待5秒钟再重试...")
time.sleep(5) # 等待5秒钟,可以根据需要调整
else:
print(f"请求失败,状态码: {response.status_code}")
break
# 打印总NFT数量
print(f"爬取完成,总共爬取了 {total_count} 个NFT")
if __name__ == "__main__":
account_address = "xxx"
opensea_api_key = "xxx"
account_nfts(account_address, opensea_api_key)
可以根据OpenSea API提供的https://docs.opensea.io/reference/nft-model输出自己想要的数据
因为免费API速率有限,所以需要在429错误后重新尝试爬取