如何用Selenium抓取网页表格?执行代码遇ValueError问题
解决Selenium抓取网页表格时"No tables found"的问题
核心问题排查
你这段代码存在几个明显的错误,直接导致了找不到表格的报错:
- 执行顺序错误:先获取了
page_source再调用sleep,此时页面还没加载完成,源码里根本没有表格内容 - 模块缺失/命名错误:没导入
pandas(代码里用了pd),且tm应该是time模块的别名,没提前导入 - Windows路径转义问题:路径里的
\会被当成转义字符,需要改成\\或者用原始字符串标记 - 固定等待不可靠:8秒的固定等待不一定能保证表格加载完成,应该用显式等待精准触发
修正后的可运行代码
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 import time # 处理路径转义问题 driver = webdriver.Chrome(r'C:\Drivers\chromedriver.exe') driver.get("https://fantasyteamadvice.com/dfs/nba/ownership") # 显式等待表格加载完成,最多等待10秒 try: WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, 'table')) ) except: print("表格加载超时,请检查网络或页面结构") driver.close() exit() # 等待完成后再获取页面源码 html = driver.page_source tables = pd.read_html(html) # 处理表格数据 if tables: data = tables[0] # 确保inputs文件夹存在,否则会报错 data.to_csv("inputs/dk_ownership.csv", index=False) print(data) else: print("页面中未找到可识别的表格") driver.close()
补充说明
- 显式等待会在表格元素出现后立即执行后续代码,比固定
sleep更高效也更稳定 - 如果运行时提示
inputs文件夹不存在,要么提前创建这个文件夹,要么直接写csv的绝对保存路径 - 若后续仍报错,可检查页面是否存在iframe嵌套表格,或表格是否通过异步接口加载(需额外处理接口请求)
内容的提问来源于stack exchange,提问作者terrell.bradford
相关产品推荐
相关产品推荐

