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

