如何拆分网页爬取得到的数据行 提升输出内容可读性
Python Bscscan数据抓取结构化输出解决方案
问题背景
你用Python编写了针对bscscan站点的网页数据抓取脚本,可从指定地址页面提取合约、代币相关数据,脚本运行正常,但提取到的原始数据存在大量多余换行、格式混乱,可读性较差,需要将原始数据拆分后按指定结构化格式输出。
原有可运行代码
import requests, re, random from bs4 import BeautifulSoup header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0' } url = "https://bscscan.com/address/0xe1fd7b4c9debac3c490d8a553c455da4979482e4" req = requests.get(url,header, timeout=10) soup = BeautifulSoup(req.content, 'html.parser') creator = soup.find(id='ContentPlaceHolder1_trContract').get_text() tokentracker = soup.find(id='ContentPlaceHolder1_tr_tokeninfo').get_text() print (creator) print (tokentracker)
原始输出(格式混乱)
ContractCreator: 0xab3a68876925ecc5f361cefe78b3dae78b971436 at txn 0xc78e35353426d2851be008bf4de269652a4ce1746d025fae5aabd72454a31715 TokenTracker: StackDoge (STACKDOGE)
期望结构化输出效果
Contract Owner: 0xab3a68876925ecc5f361cefe78b3dae78b971436 Transaction ID: 0xc78e35353426d2851be008bf4de269652a4ce1746d025fae5aabd72454a31715 Token Name: StackDoge (STACKDOGE)
修改后代码
import requests, re from bs4 import BeautifulSoup header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0' } url = "https://bscscan.com/address/0xe1fd7b4c9debac3c490d8a553c455da4979482e4" # 修正原代码参数错误:requests的请求头参数为headers req = requests.get(url, headers=header, timeout=10) soup = BeautifulSoup(req.content, 'html.parser') creator_raw = soup.find(id='ContentPlaceHolder1_trContract').get_text() tokentracker_raw = soup.find(id='ContentPlaceHolder1_tr_tokeninfo').get_text() # 提取合约所有者地址和交易ID creator_match = re.search(r'ContractCreator:\s*(0x[0-9a-fA-F]{40})\s*at txn\s*(0x[0-9a-fA-F]{64})', creator_raw) if creator_match: contract_owner = creator_match.group(1) txn_id = creator_match.group(2) # 提取代币名称 token_match = re.search(r'TokenTracker:\s*(.+)', tokentracker_raw) if token_match: token_name = token_match.group(1).strip() # 按要求格式输出 print(f"Contract Owner: {contract_owner}") print(f"Transaction ID: {txn_id}") print() print(f"Token Name: {token_name}")
实现说明
- 用正则表达式匹配固定格式的合约地址、交易哈希、代币名称,自动过滤多余的换行、空格等无效字符
- 修正了原代码中requests.get请求头参数名写错的问题,避免后续请求失败
- 增加了简单的匹配判断逻辑,防止页面结构变化导致的报错
- 如果需要全中文输出,只需把print语句里的英文标识替换为中文即可,比如把
Contract Owner替换为合约所有者
内容的提问来源于stack exchange,提问作者rbutrnz
相关产品推荐
相关产品推荐

