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

如何用Python+BeautifulSoup抓取BSCScan表格百分比值与Contract标识

问题修复说明

问题1(百分比显示0.0000%)原因

目标站点的百分比数值默认不会直接渲染在td标签的文本内容中,真实值存储在对应td标签的data-order自定义属性里,直接提取文本只能拿到默认占位的0.0000%。同时原代码调用requests时参数写法错误,请求头未正常生效,也可能导致返回内容不完整。

问题2(提取Contract文本)实现方法

直接定位地址列td下的指定i标签,提取data-original-title属性值即可,不存在该标签时返回空字符串不影响输出。

修正后完整代码

import requests
from bs4 import BeautifulSoup

url = "https://bscscan.com/token/generic-tokenholders2?m=normal&a=0x8076c74c5e3f5852037f31ff0093eeb8c8add8d3"
header = {"User-Agent": "Mozilla/5.0"}

# 修正requests传参写法,明确指定headers参数名
reqblockdetails = requests.get(url, headers=header, timeout=5)
soupblockdetails = BeautifulSoup(reqblockdetails.content, 'html.parser')
rowsblockdetails = soupblockdetails.find_all('table')[0].find_all('tr', limit=10)

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()
    # 从data-order属性取真实百分比值,格式化为4位小数加百分号
    percentage_val = float(tds[3].get('data-order', 0))
    percentage = f"{percentage_val:.4f}%"
    # 提取contract标识
    contract_tag = tds[1].find('i', class_='far fa-file-alt text-secondary')
    contract_text = contract_tag.get('data-original-title', '') if contract_tag else ''
    
    # 调整格式化宽度适配长地址,避免显示错位
    print(f" {rank:<3} {address:<45}  {amount:>30} {percentage:>10} {contract_text:>10}")

改动点说明

  • 修复requests调用参数错误,确保请求头正常生效,避免被站点反爬拦截返回异常内容
  • 百分比取值改为从td的data-order属性获取,再做格式化处理,和实际展示值一致
  • 新增i标签属性提取逻辑,匹配到对应标签时输出Contract文本,否则留空
  • 调整输出格式化的宽度配置,适配长地址内容,避免显示错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:00:03