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

使用BeautifulSoup提取表格数据时数据未显示的问题求助

解决动态加载数据的爬取问题

你碰到的这个情况很典型——网页内容是通过JavaScript动态渲染生成的。urllib.request.urlopen只能抓取页面初始的静态HTML(就是你看到的“查看网页源代码”里的内容),而那些在“检查元素”里能看到的表格数据,是浏览器加载完页面后,通过JS请求后端接口并渲染出来的,所以静态源码里根本没有这些元素,你的BeautifulSoup自然找不到它们。

下面给你两种可行的解决方案:

方案1:用Selenium模拟浏览器(适合复杂渲染场景)

Selenium可以模拟真实浏览器的行为,等待页面JS执行完成后再获取完整的渲染后源码,这样就能拿到你要的数据了。

步骤:

  1. 先安装Selenium:
pip install selenium
  1. 下载对应你Chrome版本的ChromeDriver(确保版本匹配,不然会报错)
  2. 修改你的代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup
import time

url = 'https://ethplorer.io/address/0x8b353021189375591723e7384262f45709a3c3dc'
# 初始化浏览器驱动,这里替换成你的ChromeDriver路径
driver = webdriver.Chrome(service=Service('/path/to/your/chromedriver'))
driver.get(url)

# 等待页面加载完成(可以根据实际情况调整等待时间,或者用显式等待)
time.sleep(3)

# 获取渲染后的页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')

cat = 0
for category in soup.findAll('td', {'class': 'list-field'}):
    print(category.get_text(strip=True))  # 可以用get_text只提取文本
    cat += 1

# 关闭浏览器
driver.quit()

方案2:直接调用网站的API(更高效推荐)

像Ethplorer这类区块链数据网站,通常会提供公开的API接口,直接请求API获取数据比模拟浏览器要快得多,也更稳定。

你可以直接请求它的地址信息API,示例代码:

import requests

url = 'https://api.ethplorer.io/getAddressInfo/0x8b353021189375591723e7384262f45709a3c3dc'
params = {'apiKey': 'freekey'}  # 免费API密钥,官网提供的

response = requests.get(url, params=params)
data = response.json()

# 这里可以根据你需要的数据字段来提取,比如代币信息
if 'tokens' in data:
    for token in data['tokens']:
        print(f"代币名称: {token['token']['name']}, 余额: {token['balance']}")

这个API返回的是结构化的JSON数据,你可以直接解析使用,比解析HTML要方便太多。

为什么你的原代码不行?

你的原代码用urllib.request.urlopen获取的是页面的初始静态HTML,里面根本没有那些动态生成的<td class="list-field">元素,所以循环不会执行任何内容,自然看不到输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:19:24