使用Pandas爬取BMF参考利率页面仅获表头,问题出在网站吗?
问题分析与解决
这不是网站限制,而是页面数据采用动态加载机制导致的:
- pandas的
read_html()只能解析页面静态HTML中的表格,但你目标页面的实际利率数据是通过JavaScript动态渲染注入的,静态HTML里只有表格的表头框架,没有实际数据,所以你只能抓到表头。
调整爬取方式的解决方案
方法1:用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 import pandas as pd url = 'https://www2.bmf.com.br/pages/portal/bmfbovespa/lumis/lum-taxas-referenciais-bmf-ptBR.asp' # 初始化Chrome浏览器(需提前安装对应版本的chromedriver) driver = webdriver.Chrome() driver.get(url) # 等待目标表格加载完成(通过ID定位,更精准) table = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "tblDados")) ) # 提取表格的HTML代码 table_html = table.get_attribute('outerHTML') # 用pandas解析表格数据 df = pd.read_html(table_html, decimal=',', thousands='.')[0] # 关闭浏览器 driver.quit() # 查看结果 print(df)
方法2:直接抓取数据接口(更高效)
打开浏览器开发者工具(F12)→ 切换到Network标签→ 刷新页面,筛选XHR请求,找到加载利率数据的API接口,直接请求该接口获取JSON格式的数据,再转换成DataFrame。这种方式不需要模拟浏览器,速度更快,但需要分析接口的请求参数和返回结构。
内容的提问来源于stack exchange,提问作者Tiago
相关产品推荐
相关产品推荐

