如何使用Beautiful Soup抓取Blockchain交易页高级详情中的Time等数据?
如何用Beautiful Soup抓取Blockchain.com交易详情页的高级信息(无需Selenium)
问题描述
我需要抓取的目标URL是:https://www.blockchain.com/explorer/transactions/btc/43eebdc59c6c5ce948ccd9cf514b6c2ece9f1289f136c2e3d9d69dcd29304142,要求使用Beautiful Soup而非Selenium(不打开浏览器)。尝试从class为sc-f9148dd7-2 irWxzm的section标签提取数据,但发现该标签下仅能找到sc-c907597a-0 MqlNG和sc-c907597a-3 ctQMfW的标签,无法获取到Time等高级详情区域的内容。
当前代码如下:
import requests import bs4 from bs4 import BeautifulSoup url = 'https://www.blockchain.com/explorer/transactions/btc/43eebdc59c6c5ce948ccd9cf514b6c2ece9f1289f136c2e3d9d69dcd29304142' res = requests.get(url) format = '%Y-%m-%d %H:%M' soup = BeautifulSoup(res.content, 'html.parser') soup2 = soup.find('section',{'class':'sc-f9148dd7-2 irWxzm'}) print(soup2)
需要找到获取高级详情区域数据的方法。
问题原因
Blockchain.com的交易详情页采用JavaScript动态渲染内容,requests.get()只能获取页面的初始HTML骨架,而高级详情区域的内容是页面加载完成后通过JS异步请求接口获取并渲染的,因此静态HTML中并不包含这些内容,Beautiful Soup自然无法抓取到。
解决方案:调用官方API
Blockchain.com提供了公开的API接口用于获取交易详情,这种方式比抓取页面更可靠,且不受前端页面结构变化的影响。
代码示例
import requests from datetime import datetime # 目标交易哈希 tx_hash = '43eebdc59c6c5ce948ccd9cf514b6c2ece9f1289f136c2e3d9d69dcd29304142' # 交易详情API地址 api_url = f'https://blockchain.info/rawtx/{tx_hash}' response = requests.get(api_url) tx_data = response.json() # 提取交易时间(转换Unix时间戳为可读格式) tx_time = datetime.fromtimestamp(tx_data['time']).strftime('%Y-%m-%d %H:%M') # 示例:提取其他常用数据 tx_size = tx_data['size'] total_input = sum([inp['prev_out']['value'] for inp in tx_data['inputs']]) / 100000000 total_output = sum([out['value'] for out in tx_data['out']]) / 100000000 # 打印结果 print(f"交易时间: {tx_time}") print(f"交易大小: {tx_size} bytes") print(f"总输入: {total_input} BTC") print(f"总输出: {total_output} BTC")
补充说明
- API返回的是JSON格式的完整交易数据,包含Time及所有高级详情信息,解析起来比HTML更便捷。
- 无需依赖Beautiful Soup,直接处理JSON即可,效率更高且稳定性更强。
- 前端自动生成的class名称(如
sc-f9148dd7-2 irWxzm)容易随版本更新变化,使用API可彻底规避此类问题。
内容的提问来源于stack exchange,提问作者user20433475
相关产品推荐
相关产品推荐

