You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫如何在网页中基于十六进制字符串模式抓取补充数据

解决方案

问题原因

你当前使用requests发起的是静态HTTP请求,只能获取页面初始加载的静态HTML内容。目标页面的「读取合约」模块是后续通过JavaScript异步渲染加载的,静态返回的源码里不包含这部分键值对数据,所以你之前的方法无法匹配到对应的十六进制地址字段。

可运行实现代码

我们使用支持JavaScript渲染的requests-html库来获取动态内容,代码如下:
首先安装依赖:

pip install requests requests-html beautifulsoup4

完整代码:

import re
from requests_html import HTMLSession
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#readContract"

session = HTMLSession()
req = session.get(url, headers=header, timeout=10)
# 渲染JS动态内容,等待2秒确保加载完成
req.html.render(wait=2, sleep=2)

soup = BeautifulSoup(req.html.html, 'html.parser')
# 原有基础信息提取
creator = soup.find(id='ContentPlaceHolder1_trContract')
tokentracker = soup.find(id='ContentPlaceHolder1_tr_tokeninfo')

print("Contract Owner:", creator.find('a', attrs={"title": "Creator Address"}).text)
print("Transaction ID:", creator.find('a', attrs={"title": "Creator Txn Hash"}).text)
print("Token Name:", tokentracker.find("a").text)
print()

# 提取读取合约模块的地址字段
read_contract_section = soup.find(id="readContractAccordion")
if read_contract_section:
    # 匹配所有符合规则的十六进制地址(40位字符+0x前缀)
    address_pattern = r'0x[a-fA-F0-9]{40}'
    # 遍历每个合约读取项
    for item in read_contract_section.find_all(class_="card"):
        try:
            # 提取序号和字段名
            item_title = item.find(class_="mb-0").text.strip()
            # 提取内容里的地址
            item_content = item.find(class_="card-body").text.strip()
            addresses = re.findall(address_pattern, item_content)
            if addresses:
                # 格式化输出,和期望格式对齐
                print(f"{item_title.ljust(30)}{addresses[0]}")
        except Exception:
            # 跳过没有地址的项
            continue

补充说明

如果你的环境无法运行requests-html的渲染功能,也可以替换为Selenium方案,逻辑完全一致,只需要将获取页面源码的部分替换为Selenium加载页面后获取page_source即可。
如果你只需要提取页面中所有的十六进制地址不需要对应字段名,直接对渲染后的全页源码跑正则匹配0x[a-fA-F0-9]{40}就可以拿到所有符合要求的字符串。

内容的提问来源于stack exchange,提问作者rbutrnz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:36:03