Python循环中筛选Wrapped BNB等数据移至顶部格式化输出实现方案
Bscscan交易数据抓取打印逻辑调整方案
核心逻辑是先收集所有匹配到的目标代币数据和交易明细内容,全部处理完成后再统一按要求格式输出,避免边遍历边打印导致汇总数据零散。
完整修改后代码
from bs4 import BeautifulSoup from urllib.request import Request, urlopen addrlist = ['0x13258c89cc8f640ff68d23f1d31d38a4c4a4376a6120ca077f66a0b337912386', '0x252b25b7c0ce8ebfbb85824a7af413c95ac91f544c3ae34a23c6390c6baec5f7', '0x5b3ab3c8765a2a55ad5ac394f5f89e150fdb5ea3c4620b8e8a6c9be10ab53557', '0x9c4d1308d85f9e175809b8a49418ff6cf72264bca10660cc8d91a01b93487503'] url = "https://bscscan.com/tx/" count = 0 for i in addrlist: count += 1 url1 = url + i req = Request(url1, headers={'User-Agent': 'Mozilla/5.0'}) webpage = urlopen(req).read() soup = BeautifulSoup(webpage, 'html.parser') main_data = soup.select("ul#wrapperContent div.media-body") # 初始化存储变量:目标代币汇总列表、明细行列表 target_summary = [] detail_lines = [] for item in main_data: all_span = item.find_all("span", class_='mr-1') last_span = all_span[-1] all_a = item.find_all("a") last_a = all_a[-1] tval = last_span.get_text(strip=True) token_name = last_a.get_text(strip=True)[:11] # 先存明细行 detail_lines.append(" ** {:>35} | {:14} | {}".format(last_a['href'][7:], token_name, tval)) # 判断是否为目标代币,是则加入汇总列表 if token_name in ("Wrapped BNB", "Binance-Peg"): target_summary.append(f"{tval} {token_name}") # 统一输出 print(f"Item: {count} -> {' / '.join(target_summary)}") for line in detail_lines: print(line) print("--------------------------------------------------------------------------------------------------------------")
调整点说明
- 移除了遍历明细过程中打印目标代币数据的逻辑,改为将匹配到的目标数据存入临时汇总列表
- 所有交易明细先格式化后存入临时列表,不直接打印
- 单地址所有明细处理完成后,先打印带汇总数据的Item头部,再批量打印所有明细行
- 多个目标代币的汇总数据用
/拼接,和期望输出格式完全对齐
内容的提问来源于stack exchange,提问作者rbutrnz
相关产品推荐
相关产品推荐

