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

使用BeautifulSoup爬取BSCscan表格时出现NoneType无find属性错误如何解决

问题原因分析
  • 错误的直接诱因是 soup.find('table', class_='table table-md-text-normal table-hover') 没有匹配到任何元素,返回了None,后续调用find方法就会抛出AttributeError
  • 根本原因是目标站点bscscan设置了反爬策略,默认不带请求头的requests.get请求会被拦截,返回的页面不是预期的包含持仓表格的正常页面,自然找不到对应类名的表格。
解决步骤
  1. 首先添加合法的User-Agent请求头,模拟浏览器请求,避免被反爬拦截
  2. 增加非空判断逻辑,避免元素不存在时直接调用方法抛出异常
  3. 可根据需要增加请求超时、状态码校验的逻辑,进一步提升代码健壮性
修正后的代码
import requests
from bs4 import BeautifulSoup

url = "https://bscscan.com/token/0xe432afB7283A08Be24E9038C30CA6336A7cC8218#balances"
# 添加请求头模拟浏览器
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
# 增加超时配置和状态码校验
r = requests.get(url, headers=headers, timeout=10)
r.raise_for_status() # 请求状态码非200时直接抛出异常,避免后续处理无效页面

soup = BeautifulSoup(r.text, 'lxml')
t = soup.find('table', class_='table table-md-text-normal table-hover')
# 增加非空判断逻辑
if t:
    tbody = t.find('tbody')
    if tbody:
        trs = tbody.find_all('tr')
        for tr in trs[:5]:
            print(list(tr.stripped_strings))
    else:
        print("未找到表格tbody元素")
else:
    print("未找到匹配的表格元素")
补充说明

如果修改后还是找不到表格,可以打印r.text查看返回的页面内容,确认是否触发了人机验证、IP封禁等其他反爬限制,若触发这类限制可适当增加请求间隔、使用代理IP等方式规避。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:15:03