使用BS4抓取币安合约资金历史表格仅获表头,求解决方案
无法提取币安期货资金历史表格完整数据的解决方案
我的问题:
尝试从网址https://www.binance.com/en/futures/funding-history/0提取表格数据,但以下代码仅能提取表格的表头部分:import requests from bs4 import BeautifulSoup r = requests.get('https://www.binance.com/en/futures/funding-history/0') soup = BeautifulSoup(r.text, 'html.parser') resultsTable = soup.findChildren('table')[0] rows = resultsTable.findChildren(['tr']) print(rows)请问我遗漏了什么内容,或是有更优的实现方法?
问题根源:动态加载的数据
你用requests拿到的只是页面的初始静态HTML,而币安这个页面的表格数据是通过JavaScript异步请求后端API加载的——也就是说,当你用requests请求时,表格的内容还没被渲染出来,只有表头是写在初始HTML里的,所以BeautifulSoup只能抓到表头。
两种最优解决方案
方案1:直接调用官方API(推荐)
币安提供了公开的期货资金费率历史API,这比解析HTML高效100倍,而且数据格式更规整(JSON),还不容易因为页面改版失效。
示例代码:
import requests # 替换为你需要查询的交易对,比如BTCUSDT、ETHUSDT target_symbol = "BTCUSDT" api_url = "https://www.binance.com/fapi/v1/fundingRateHistory" # 构造请求参数(limit最多支持100条,可按需调整) request_params = { "symbol": target_symbol, "limit": 50 } # 发送请求并解析JSON response = requests.get(api_url, params=request_params) funding_data = response.json() # 打印并处理数据 for entry in funding_data: print(f"交易对: {entry['symbol']}") print(f"资金费率: {float(entry['fundingRate']) * 100}%") print(f"资金结算时间: {entry['fundingTime']}\n")
方案2:用Selenium模拟浏览器加载页面
如果你不想找API,或者需要处理更复杂的动态渲染场景,可以用Selenium模拟真实浏览器的行为,等页面完全加载后再提取数据。
示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化Chrome浏览器(需要提前安装ChromeDriver并配置环境变量) driver = webdriver.Chrome() driver.get("https://www.binance.com/en/futures/funding-history/0") # 等待表格数据加载完成(最多等待10秒) wait = WebDriverWait(driver, 10) # 等待所有表格行加载出来 all_rows = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "table tr"))) # 提取数据(跳过第一行表头) for row in all_rows[1:]: columns = row.find_elements(By.TAG_NAME, "td") row_data = [col.text.strip() for col in columns] print(row_data) # 关闭浏览器 driver.quit()
补充说明
- 方案1的API是币安官方提供的,稳定性和可靠性远高于解析HTML,建议优先使用。
- 如果你需要查询特定时间范围的资金历史,可以在API参数中添加
startTime和endTime(毫秒级时间戳)。
内容的提问来源于stack exchange,提问作者psuresh
相关产品推荐
相关产品推荐

