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

使用requests、Selenium等常规工具无法抓取网站表格的技术求助

问题解决思路

失效根因

你当前的代码及Selenium定位失效的核心原因是:目标表格没有直接放在当前页面的DOM树中,而是嵌套在独立的<iframe>容器内。requests-html、BeautifulSoup默认只会解析父页面的源码,Selenium默认也只会操作父页面的上下文,因此都无法识别到iframe内部的元素。

适配解决方法

方法1:切换iframe上下文(Selenium方案)

使用Selenium时先定位到表格所在的iframe,再切换上下文后执行元素定位即可,示例代码如下:

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()
driver.get("https://www.nbc4i.com/news/state-news/535-new-cases-of-covid-19-reported-in-ohio-schools-in-past-week/")
# 显式等待iframe加载完成,比固定sleep更稳定
wait = WebDriverWait(driver, 10)
iframe = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[src*='datawrapper']")))
# 切换到iframe上下文
driver.switch_to.frame(iframe)
# 此时可以正常定位表格及内部元素
table = wait.until(EC.presence_of_element_located((By.ID, "table")))
# 后续分页、提取数据操作都在该上下文内执行即可

方法2:直接请求iframe独立地址(requests-html方案)

你可以先从父页面提取iframe的src属性值,直接请求该iframe的独立页面地址,再渲染解析内容,不需要处理父页面的其他元素,逻辑更简单。

方法3:直接拉取原始接口数据(最高效)

分页表格的内容都是通过后端接口返回的结构化数据,你可以通过浏览器开发者工具的「网络」面板,筛选XHR/Fetch类型的请求,找到表格数据的接口地址,直接请求接口获取JSON格式的原始数据,不需要解析HTML,也不用处理分页渲染逻辑,效率最高。

额外注意事项

如果请求iframe地址或数据接口时返回异常,需要补充和浏览器一致的User-Agent、Referer等请求头,必要时携带页面生成的Cookie信息,避开反爬校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:36:07