You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium+pd.read_html爬取ArcGIS网页表格报No tables found错误如何解决

ValueError: No tables found 错误排查解决方案
  • 第一步:添加页面加载等待
    你当前的代码在执行driver.get()后立即抓取页面源码,而ArcGIS平台的表格属于异步渲染的动态内容,触发请求到完全渲染需要一定时间,此时页面还未生成表格结构就被抓取,自然会识别不到。
    可以先添加强制等待测试效果,正式环境建议使用Selenium的显式等待,定位到表格元素后再执行后续操作,参考测试代码:
    import pandas as pd
    import time
    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
    
    driver = webdriver.Chrome(executable_path=r"C:\chromedriver_win32\chromedriver.exe")
    driver.get("https://geosaurus.maps.arcgis.com/home/item.html?id=adaead8cb3174ac6a89f0c14ae70aadd&view=list&sortOrder=desc&sortField=defaultFSOrder#data")
    # 先加10秒强制等待测试
    time.sleep(10)
    # 显式等待写法(性能更稳定,推荐替换上面的time.sleep):
    # WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, "table")))
    html = driver.page_source
    tables = pd.read_html(html)
    print(tables)
    
  • 第二步:检查表格是否嵌套在iframe中
    ArcGIS平台常将数据内容放在独立的iframe中,当前页面的源码默认不包含iframe内的内容,需要先切换到对应iframe再抓取源码:
    你可以在浏览器F12控制台中搜索表格的父级元素是否为<iframe>标签,如果是,添加切换iframe的代码即可:
    # 先定位iframe元素,可根据id、class等属性调整选择器,以下为示例
    iframe = driver.find_element(By.CSS_SELECTOR, "iframe.表格对应的iframe选择器")
    driver.switch_to.frame(iframe)
    # 切换完成后再抓取源码
    html = driver.page_source
    
  • 第三步:确认表格是否为标准结构
    <div><table>、<tr>、<td>pd.read_html()

    内容的提问来源于stack exchange,提问作者Harry Peng

    部分前端实现会用标签模拟表格样式,这类伪表格没有等标准表格标签,无法识别,需要你自行通过Selenium定位行、列元素,逐行提取内容后手动拼接成DataFrame。
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:45:00