如何用Python获取指定URL中的表格数据?代码报错求助
Python爬虫报错解决:获取网站账户数据失败
问题代码
import requests from bs4 import BeautifulSoup headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0",} url = "https://mine.com/blockexplorer/account/GDOI7OSBDM3WPXWFT3RUPGGLV3Y5MKZJKNN4CZMQITUWWQRUF5IXCLZJ" r = requests.get(url, headers=headers) soup = BeautifulSoup(r.content, "lxml") t = soup.find("table", class_="table") trs = t.find("tbody").find_all("tr") for tr in trs: print(list(tr.stripped_strings))
报错信息
Traceback (most recent call last): File "C:/Users/es***a/Desktop/Pi Scripts/pi-temp1.py", line 14, in <module> trs = t.find("tbody").find_all("tr") AttributeError: 'NoneType' object has no attribute 'find'
期望输出
Public Key: GDOI7OSBDM3WPXWFT3RUPGGLV3Y5MKZJKNN4CZMQITUWWQRUF5IXCLZJ Balance: 26.9231952
解决思路与修正方案
报错核心原因
soup.find("table", class_="table")返回None,说明requests抓取的静态HTML里不存在你指定的表格。大概率是目标网站的账户数据通过JavaScript动态渲染,静态页面中没有加载这些内容;也可能是你使用的选择器和页面实际结构不匹配。
方案1:用Selenium处理动态渲染页面
如果数据是JS动态加载的,用Selenium模拟浏览器完整加载页面后再提取数据:
from selenium import webdriver from selenium.webdriver.firefox.options import Options from bs4 import BeautifulSoup # 配置无头浏览器,不显示窗口 options = Options() options.add_argument("--headless") driver = webdriver.Firefox(options=options) url = "https://mine.com/blockexplorer/account/GDOI7OSBDM3WPXWFT3RUPGGLV3Y5MKZJKNN4CZMQITUWWQRUF5IXCLZJ" driver.get(url) soup = BeautifulSoup(driver.page_source, "lxml") # 请根据页面实际结构调整选择器,以下为示例 public_key_elem = soup.find("div", class_="account-public-key") balance_elem = soup.find("span", class_="account-balance") if public_key_elem and balance_elem: print(f"Public Key: {public_key_elem.text.strip()}") print(f"Balance: {balance_elem.text.strip()}") driver.quit()
方案2:直接请求网站API接口
打开浏览器开发者工具(F12),切换到Network标签刷新页面,找到返回账户数据的XHR/Fetch接口,直接请求接口获取数据,比爬页面更高效:
import requests headers = { "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0", "X-Requested-With": "XMLHttpRequest" } # 替换为实际找到的API接口地址 api_url = "https://mine.com/api/account/GDOI7OSBDM3WPXWFT3RUPGGLV3Y5MKZJKNN4CZMQITUWWQRUF5IXCLZJ" response = requests.get(api_url, headers=headers) data = response.json() print(f"Public Key: {data['publicKey']}") print(f"Balance: {data['balance']}")
注意事项
- 爬取前请遵守网站的
robots.txt规则和使用条款,避免触发反爬限制。 - 使用Selenium时,确保浏览器驱动版本与本地浏览器版本匹配。
内容的提问来源于stack exchange,提问作者errzoned
相关产品推荐
相关产品推荐

