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

如何抓取使用frameset框架的老式政府网站数据

解决Frameset框架页面的数据抓取问题

方法一:直接请求子页面URL

从你用requests获取的主页面源码能看到,目标内容所在的frame的src是Lake_ElecSumm_all.htm,这是相对路径,需和主页面URL拼接成完整地址:
https://lakecounty.in.gov/departments/voters/election-results-c/2022GeneralElectionResults/Lake_ElecSumm_all.htm

可以直接用requests+BeautifulSoup抓取这个子页面:

import requests
from bs4 import BeautifulSoup

sub_url = "https://lakecounty.in.gov/departments/voters/election-results-c/2022GeneralElectionResults/Lake_ElecSumm_all.htm"
response = requests.get(sub_url)
response.encoding = 'iso-8859-1'  # 匹配页面指定的编码
soup = BeautifulSoup(response.text, 'html.parser')

# 按需提取数据,示例:打印页面文本内容
print(soup.get_text())

方法二:修正Splinter/Selenium代码,切换到Frame上下文

你之前的代码仅定位了frame元素,但未切换到frame的上下文,因此无法获取内部内容。需要先切换到目标frame,再进行内容抓取:

from splinter import Browser
import time

url = "https://lakecounty.in.gov/departments/voters/election-results-c/2022GeneralElectionResults/index.htm"

browser = Browser('chrome')  # 替换为你使用的浏览器驱动
browser.visit(url)

time.sleep(2)  # 等待页面加载完成

# 方式1:通过frame的name属性切换(页面中该frame的name为'reports')
browser.driver.switch_to.frame('reports')

# 方式2:通过xpath定位frame后切换(可选)
# frame_element = browser.find_by_xpath('/html/frameset/frameset/frame[2]').first
# browser.driver.switch_to.frame(frame_element._element)

# 现在可获取frame内的内容
print(browser.html)

# 若后续需操作主页面,切回主上下文
browser.driver.switch_to.default_content()

browser.quit()

之前方法无效的原因

  • requests/BeautifulSoup:主页面仅为frameset框架布局,实际数据存储在独立的子页面中,直接请求主页面只能拿到框架结构,无法获取子页面内容。
  • Splinter/Selenium:未切换到frame的上下文,代码始终操作主页面DOM,自然无法读取frame内部的元素文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:15:37