抓取Anbima网站债券日程表格时Selenium仅返回skeleton-container的问题解决咨询
抓取Anbima网站债券日程表格时Selenium仅返回skeleton-container的问题解决咨询
嗨,Leonardo!你遇到的这个问题其实很常见——页面上的skeleton-container是网站在异步加载真实数据时显示的占位符,你的Selenium代码跑得太快了,还没等浏览器把真实数据渲染出来就抓取了HTML,所以拿到的是加载前的占位内容。
下面给你两个实用的解决方案:
方案一:用Selenium显式等待,等真实数据加载完成
既然数据是动态渲染的,我们可以让Selenium等待直到真实的表格内容出现,再去抓取HTML。比如可以等待表格里第一个有真实内容的元素(比如你示例里的agenda-data-evento-0这个ID元素)加载完成:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By deb = 'AALM11' link_agenda = 'https://data.anbima.com.br/debentures/' + deb + '/agenda?page=1&size=100' driver.get(link_agenda) # 最多等待10秒,直到第一个事件日期元素出现 wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located((By.ID, 'agenda-data-evento-0'))) # 现在再获取表格的HTML,就能拿到真实数据了 html_source = driver.find_element(By.TAG_NAME, 'table').get_attribute('outerHTML')
这样就能确保浏览器已经把骨架屏替换成真实的表格数据,再进行抓取。如果agenda-data-evento-0这个ID不稳定,你也可以换个等待条件,比如等待tbody里的td元素不再包含skeleton-container类。
方案二:直接调用网站的API接口获取数据(更高效)
其实这类动态加载的数据,通常是通过AJAX请求从后端API获取的。你可以跳过浏览器渲染,直接请求API拿到结构化的JSON数据,这样速度更快,也不需要处理HTML解析的麻烦:
- 打开浏览器DevTools的「Network」面板,刷新目标页面;
- 在请求列表里筛选「XHR」或「Fetch」类型,找和日程数据相关的请求(比如搜索关键词
agenda); - 复制该请求的URL、请求头(比如
User-Agent、Referer这些可能需要的字段); - 用
requests库发送请求,直接解析JSON数据。
举个例子(假设找到的API接口如下):
import requests deb = 'AALM11' api_url = f'https://data.anbima.com.br/api/debentures/{deb}/agenda?page=1&size=100' # 复制你在DevTools里看到的请求头,确保请求被服务器接受 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', 'Referer': f'https://data.anbima.com.br/debentures/{deb}/agenda' } response = requests.get(api_url, headers=headers) response.raise_for_status() # 检查请求是否成功 data = response.json() # 解析数据,比如遍历所有日程项 for agenda_item in data['content']: print(f"Data do evento: {agenda_item['dataEvento']}") print(f"Data de liquidação: {agenda_item['dataLiquidacao']}") print(f"Evento: {agenda_item['evento']}") # 其他字段可以根据返回的JSON结构自行提取
这种方法不仅效率更高,而且数据是结构化的,不需要再去解析HTML表格,后期处理也更方便。
如果遇到API需要认证或者有反爬限制,你可能需要进一步模拟浏览器的请求行为,但大部分公开数据的API只要带上正确的请求头就能正常访问。
备注:内容来源于stack exchange,提问作者Leonardo Ramunno
相关产品推荐
相关产品推荐

