利用Python监控任意数字资产钱包余额:从API到爬虫实战

远山来客
远山来客
发布时间:2026-10-13| 6人浏览过
原创

本文详解如何使用Python监控各类数字资产钱包余额。针对提供API的区块浏览器(如btc.com、etherscan.io),介绍直接调用接口及单位换算方法;针对无API的浏览器(如chainx.org),演示通过开发者工具抓取XHR请求进行数据解析。结合钉钉机器人实现余额变动实时提醒,涵盖BTC、ETH及ERC20代币的完整监控方案。

数字资产钱包余额监控概述

当资产托管在交易所时,可通过调用交易所提供的API接口,利用Python脚本实时监控账户余额。

若资产存储于去中心化钱包,应如何有效监控其余额变化?

所有数字资产均可通过区块浏览器查询余额。核心思路是利用Python程序对接各类区块浏览器的数据接口,从而实现对所有资产余额的统一监控。

市面上存在众多数字资产区块链浏览器,例如比特币区块浏览器btc.com、以太坊区块浏览器etherscan.io、ATOM区块浏览器mintscan.io以及PCX区块浏览器scan.chainx.org等。

根据是否公开提供API接口,区块浏览器可分为两类:优质浏览器通常会明确标注API文档供开发者使用;而部分设计较为粗糙的浏览器虽未明确告知API,但通过技术手段仍可挖掘出可用的数据接口。

接下来将分别对这两类情况进行详细分析。

提供API的区块浏览器监控方案

一、提供公开API查询的区块浏览器

1. 比特币区块浏览器 btc.com

在其首页底部提供了API文档及说明,链接为https://btc.com/api-do。


此类浏览器的数据获取相对简单,只需依据文档指引,构造包含目标地址的查询URL即可。

以btc.com为例,获取余额的URL格式为https://chain.api.btc.com/v3/address/3JvpMTpy6DDp1Um3iEGYpkBaUmJp7ReMR2,其中末尾字符串为比特币钱包地址。在Python中,使用requests.get()方法调用该URL即可返回相关数据,具体返回内容见下图。

需注意,不同币种的余额单位存在差异,需根据具体币种对返回数据进行相应调整。例如,上述示例中的余额数值需除以10的7次方(10e7),方可得到实际余额0.14141195个BTC。

在此基础上,即可实现对钱包余额的持续监控。假设你从其他渠道向钱包转入1个比特币,可通过程序判断余额是否超过1个BTC,并在满足条件时通过钉钉机器人发送消息提醒。

完整实现代码如下:


import pandas as pd
import random
import ccxt
import threading, time, datetime
import json
import urllib
import datetime
import requests

# 异常监控用
def send_dingding_msg1(content, robot_id='你的钉钉机器人ID'):
  try:
    msg = {
      "msgtype": "text",
      "text": {"content": content + '\n' + datetime.datetime.now().strftime("%m-%d %H:%M:%S")}
    }
    headers = {"Content-Type": "application/json ;charset=utf-8 "}
    url = 'https://oapi.dingtalk.com/robot/send?access_token=' + robot_id
    body = json.dumps(msg)
    status = requests.post(url, data=body, headers=headers)
    if status.status_code == 200:
      return status.json()
    return status
  except Exception as err:
print ( '钉钉发送失败' , err)

while True:
  try:
    address = '你的比特币钱包地址' # 比特币钱包地址
    url = 'https://chain.api.btc.com/v3/address/' + address # 获取余额地址
    # 可以用f'https://chain.api.btc.com/v3/address/{address}'替代
    response = requests.get(url)
    if response.text: # 发现有时候会出现错误导致返回数据为空,加此目的当数据为空时继续获取余额
      # print(response.json())
      BTC = float(response.json()['data']['balance']) / 10e7 # 科学计数法,处理返回数据
      print('BTC', BTC)
    else:
      continue
    if BTC > 1: # 当余额大于1时实现钉钉提醒
      print('BTC', BTC)
      content = 'BTC钱包充值到账' #
      send_msg1 = send_dingding_msg1(content)
      print(send_msg1)
      break
    time.sleep(5)
  except Exception as order_err:
    print("查询出错,继续尝试", order_err)
    time.sleep(3)

以太坊及ERC20代币余额查询

2. 以太坊区块浏览器etherscan.io余额查询

同样,https://etherscan.io/apis页面提供了相关文档。与前述方法略有不同,此处需要申请API Key,流程类似于交易所API申请,需先完成注册。

查阅文档可知,获取以太坊余额的URL格式为:https://api.etherscan.io/api?module=account&action=balance&address=0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a&tag=latest&apikey=YourApiKeyToken。该URL包含需查询的以太坊地址address及申请的apikey,建议将这两个参数设为变量,以便后续修改。

接下来需处理返回数据。同样需注意单位差异,余额数值需除以10的17次方(10e17)才能转换为标准单位。

同样可设置监控逻辑,例如当充值至该钱包的ETH余额超过10时,触发提醒通知。

此外,大量数字货币为基于以太坊的ERC20代币,如何获取此类代币的余额?

在文档的Token栏目中,可找到获取地址的说明,URL格式为https://api.etherscan.io/api?module=account&action=tokenbalance&contractaddress=0x57d90b64a1a57749b0f932f1a3395792e12e7055&address=0xe04f27eb70e025b78871a2ad7eabe85e61212761&tag=latest&apikey=YourApiKeyToken。对比ETH余额查询接口,此方法多了一个智能合约地址contractaddress参数。该查询方式同样简便,只需在https://etherscan.io搜索代币(如OMG),即可获取其合约地址。


将上述三个参数组合成新的请求URL,即可获取代币余额。需准备的参数包括:查询的以太坊地址address、申请的apikey以及代币合约地址contractaddress。建议将这三个变量化,便于灵活调整。

完整实现代码如下:


while True:
  try:
    apikey = '你在https://etherscan.io申请的apikey'
    address = '你的以太坊地址'
    # 查询以太坊地址
    url1 = 'https://api.etherscan.io/api?module=account&action=balance&address='+address+'&tag=latest&apikey='+apikey

    # 查询ERC20地址
    contractaddress = '0xd26114cd6EE289AccF82350c8d8487fedB8A0C07' ##OMG合约地址
    url2 = 'https://api.etherscan.io/api?module=account&action=tokenbalance&contractaddress='+ contractaddress+ '&address='+ address+'&tag=latest&apikey='+ apikey
    response1 = requests.get(url1)
    response2 = requests.get(url2)
    # print(response.json())
    asset1 = 'ETH'
    asset2 = 'OMG'
    ban1 = float(response1.json()['result']) / 10e17 # 科学计数法,处理返回数据
    ban2 = float(response2.json()['result']) / 10e17 # 科学计数法,处理返回数据
    print(asset1, ban1)
    print(asset2, ban2)
    if ban1 > 10:
      print(asset1, ban1)
      content = 'ETH钱包充值到账'
      send_msg1 = send_dingding_msg1(content)
      print(send_msg1)
      break
    time.sleep(5)
  except Exception as order_err:
    print("查询出错,继续尝试", order_err)
    time.sleep(3)

无API区块浏览器的爬虫监控方案

二、不提供公开API的区块浏览器

此类方法相对复杂,需借助爬虫技术获取地址数据。

以近期热门的chainx代币PCX为例进行说明。该币种采用锁仓BTC挖矿方式生成PCX,提取利息需持有约11倍PCX进行投票,实质是鼓励用户购买PCX。若在内网(链上交易)挂低价单购买,可通过程序监控区块浏览器中目标地址的余额,一旦交易成交立即投票以获取利息。

未经历上述场景的读者可能觉得复杂,但我们的核心目标仅在于通过程序获取钱包余额。

PCX区块浏览器地址为https://scan.chainx.org/,输入钱包地址后可查看账户详情。如何利用程序获取余额?

在谷歌浏览器中按F12进入开发者模式,点击Network标签页下的XHR分类,随后刷新页面。

观察发现,在balance字段展开后可见余额信息,因此只需定位到请求头部信息即可获取数据。


点击Headers标签页,提取所需信息,具体见下图。


获取相关信息后,对数据进行相应处理即可。

当时设定购买阈值为35个,因此当数量超过30时,通过钉钉发送通知。

完整实现代码如下:


while True:
  try:
    url = "https://api.chainx.org.cn/account/你的PCX钱包地址/balance"
    headers = {
      "Content-type": "application/json; charset=utf-8",
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    balance = response.json()
    # print(balance)
    asset = 'PCX'
    PCX = balance[1]['Free']/100000000 # 此处注意PCX代币的位置,如果在第0个就改成[0]
    print('PCX', PCX)

    if PCX > 30:
      print('PCX', PCX)
      content = 'PCX购买已到账,余额为' + str(PCX) # 发一个变量,用str转换下
      send_msg1 = send_dingding_msg1(content)
      print(send_msg1)
      break
    time.sleep(3)
  except Exception as order_err:
    print("查询出错,继续尝试", order_err)
    time.sleep(3)

其他不提供API的区块浏览器,获取方式均与此类似。

掌握上述方法后,即可通过程序获取任意区块浏览器地址的余额,并实现实时监控。

总结

以上介绍了使用Python调取任意数字资产钱包余额的功能,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持! 若本文对您有所帮助,欢迎转载,请注明出处,谢谢!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。