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

Python爬取BSCScan代币数据时get_transfer_count函数失效问题排查

BSCScan代币转账数抓取异常修复方案

故障根因

  • 代码未导入re模块,正则匹配逻辑直接报错,被空的except语句吞掉后返回空值
  • 函数参数定义语法错误,参数注解写反
  • BSCScan已调整接口规则,原依赖sid参数的异步转账接口已失效
  • 冗余请求设计,函数内重复请求代币首页,容易触发反爬限制

修复后可运行代码

import requests
import re
from bs4 import BeautifulSoup

header = {
    "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0",
}
tokenurl = (
    "https://bscscan.com/token/0xe56842ed550ff2794f010738554db45e60730371"
)
token = "0xe56842ed550ff2794f010738554db45e60730371"

contractpage = requests.get(tokenurl, headers=header)
ca = BeautifulSoup(contractpage.content, "html.parser")
name = ca.h1.span.get_text(strip=True)
price = ca.select_one(".card-body .d-block").get_text(strip=True)
cap = ca.select_one("#pricebutton").get_text(strip=True)

def get_transfer_count(page_text: str)->str:
    # 直接从已请求的页面文本中匹配转账总数,无需额外请求接口
    try:
        return re.search(r"var totaltxns = '(\d+(?:,\d+)*)'", page_text).group(1)
    except:
        return "获取失败"

transcount = get_transfer_count(contractpage.text)

print("Token:", name)
print("PRICE:", price)
print("Fully Diluted Market Cap:", cap)
print ("Transfer: ", transcount)
print()

优化说明

  • 复用首次请求返回的页面内容,减少请求次数降低反爬风险
  • 移除已失效的sid接口请求逻辑,直接匹配首页JS内的总转账数变量
  • 异常分支增加默认返回值,避免输出None
  • 修正参数注解语法错误,补全re模块导入

内容的提问来源于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 06:54:02