为何pandas read_html返回空列表?Selenium亦获取空表格
解决方法
问题根源
这个页面的表格数据并非初始HTML自带的静态内容,而是通过JavaScript发起AJAX请求动态加载的。这就导致:
pandas.read_html直接请求页面时,只能拿到空的表格框架,获取不到实际数据- 仅用Selenium等待表格元素存在时,表格的tbody部分还未填充数据,所以获取的outerHTML仍是空表格
方案一:改进Selenium等待逻辑
等待表格的tbody中出现数据行,确保数据加载完成后再提取内容:
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 driver = webdriver.Chrome() driver.get("https://anex.us/grades/?dept=ENGR&number=102") # 等待表格tbody中加载出至少一行数据 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, '#dataTable tbody tr')) ) # 提取表格HTML并解析为DataFrame table_html = driver.find_element(By.ID, 'dataTable').get_attribute('outerHTML') dfs = pd.read_html(table_html) print(dfs[0]) driver.quit()
方案二:直接调用后端API(更高效)
页面实际是请求接口获取JSON格式的表格数据,直接请求该接口即可跳过前端渲染,高效获取数据:
import pandas as pd import requests api_url = "https://anex.us/grades/api.php?dept=ENGR&number=102" response = requests.get(api_url) data = response.json() # 将JSON数据转换为DataFrame df = pd.DataFrame(data) print(df)
内容的提问来源于stack exchange,提问作者Ryan Asar
相关产品推荐
相关产品推荐

