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

抓取BSCScan表格数据返回空白 原有Python可用代码突然失效

故障原因
  • 反爬拦截:BSCScan现已启用Cloudflare人机校验机制,你使用的2021年的旧版User-Agent极易被识别为爬虫,普通requests请求大概率返回403或验证页面,没有拿到真实的持仓表格数据,因此遍历无内容、输出空白。
  • 请求逻辑错误:你创建了requests.Session()但并未实际使用,Session能自动管理Cookie的特性完全浪费,进一步提升了被反爬拦截的概率。
  • 页面结构更新:BSCScan的持仓页DOM结构已迭代,原有硬编码的findAll('table')[0]索引、合约图标选择器都已失效,就算拿到页面内容也无法正确定位数据。
  • 格式化逻辑错误:原有print语句的占位符顺序、位置标记错误,就算拿到数据也会出现格式错乱甚至报错。
修复方案
  1. 替换普通requests为cloudscraper库自动绕过Cloudflare验证,不需要手动处理人机校验
  2. 修正请求逻辑,更新为最新的浏览器User-Agent
  3. 替换硬编码的表格索引为带class的精准选择器,适配最新的页面结构
  4. 修正输出格式化的参数顺序,和实际数据对应

修复后可运行代码

import cloudscraper
from bs4 import BeautifulSoup

# 初始化可绕过Cloudflare的请求实例
scraper = cloudscraper.create_scraper(
    browser={
        'browser': 'chrome',
        'platform': 'windows',
        'desktop': True
    }
)

url = "https://bscscan.com/token/generic-tokenholders2?m=normal&a="
token = "0xe56842ed550ff2794f010738554db45e60730371"
holdersurl = url + token

# 请求页面
r = scraper.get(holdersurl)
r.encoding = 'utf-8'
soupblockdetails = BeautifulSoup(r.text, 'html.parser')

# 精准定位持仓表格,避免硬编码索引失效
holder_table = soupblockdetails.select_one('table.table.table-hover.table-striped.align-middle')
rowsblockdetails = holder_table.find_all('tr', limit=6)

for row in rowsblockdetails[1:]:
    tds = row.find_all('td')
    rank = tds[0].text.strip()
    address = tds[1].text.strip()
    amount = tds[2].text.strip()
    percentage = tds[3].text.strip()
    value = tds[4].text.strip()
         
    try:
        # 适配最新的合约图标选择器
        row.select_one("i.text-secondary[title='Contract']")
        calock = "Contract"
    except:
        calock = "Unlocked"

    # 修正格式化顺序,和输出需求对齐
    print(f"{rank}  {address}  {amount}  {percentage}  {value}  {calock}")

依赖安装

运行前先安装需要的第三方库:

pip install cloudscraper beautifulsoup4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:06:02