需点击显示的表格数据爬取失败问题求助(附代码)
解决方案与多日数据爬取指导
一、修复当前表格爬取问题
你的报错是因为目标板块默认显示图表,表格未渲染,必须先触发“Tabell”按钮的点击操作。以下是修复后的代码:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import pandas as pd # 初始化浏览器 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get("https://www.svk.se/om-kraftsystemet/kontrollrummet/") try: # 等待"Förbrukning I Sverige"板块的Tabell按钮加载完成并点击 tabell_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//div[contains(@class, 'section-forbrukning')]//button[text()='Tabell']")) ) tabell_btn.click() # 等待表格加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "div.section-forbrukning table")) ) # 获取页面源码并提取表格 html = driver.page_source tables = pd.read_html(html) # 取最后一个表格(对应目标板块) data = tables[-1] print(data.head()) finally: # 确保浏览器关闭 driver.quit()
关键说明:
- 用
WebDriverWait等待元素加载,避免页面异步渲染导致的元素找不到问题 - 通过XPATH精准定位目标板块下的“Tabell”按钮,防止误点其他板块的切换按钮
- 等待表格出现后再提取源码,保证
pd.read_html能捕获到有效表格数据
二、多日数据爬取方向指导
分析页面日期交互逻辑
- 观察页面的日期控件:如果有日历选择或前后日期切换按钮,用Selenium模拟点击切换日期,重复执行“点击Tabell→提取表格”的流程
- 检查URL参数:切换日期后如果URL带有日期参数(如
?date=2024-05-20),可以直接构造不同日期的URL,减少浏览器交互操作
批量爬取与数据存储
- 用
datetime模块生成需要爬取的连续日期列表 - 循环遍历日期列表,每次切换日期后提取表格数据,将数据追加到DataFrame或直接写入CSV/数据库
- 加入随机等待时间(如
time.sleep(random.uniform(1,3))),避免请求过于频繁触发反爬
- 用
备选高效方案:调用API
- 打开浏览器开发者工具(F12),切换到“网络”标签,操作日期切换或Tabell按钮,观察是否有XHR/fetch请求获取表格数据
- 如果找到对应的API接口,直接用
requests库发送请求解析JSON数据,效率远高于Selenium模拟浏览器
内容的提问来源于stack exchange,提问作者user20050294
相关产品推荐
相关产品推荐

