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
相关产品推荐
相关产品推荐

