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

如何使用Python BeautifulSoup抓取网页中无法直接获取的表格内容

问题原因

你遇到的问题是目标站点的表格属于客户端动态渲染内容:

  • 你用requests直接请求拿到的是服务端返回的初始静态HTML,此时页面还未执行JavaScript代码,表格元素尚未生成,因此BeautifulSoup找不到对应标签
  • 浏览器中能看到table标签,是因为浏览器加载完静态资源后自动执行了页面附带的JS脚本,JS从后端接口拉取到表格数据后才渲染生成了table元素
可行解决方法

有两种常用的解决思路:

方法1:使用无头浏览器模拟页面加载

使用可以执行JS的工具模拟浏览器完整加载过程,等待页面渲染完成后再提取表格内容,以下是Selenium的示例代码:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# 配置无头Chrome
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")

url = "https://dapo.kemdikbud.go.id/sp/3/100203"
driver = webdriver.Chrome(options=chrome_options)
driver.get(url)
# 等待页面JS执行完成,可根据实际情况调整等待时间或者用显式等待
time.sleep(3)

# 获取渲染完成的页面源码
page_source = driver.page_source
bs = BeautifulSoup(page_source, 'html.parser')
table = bs.find('table')
print(table)

driver.quit()

方法2:直接调用数据接口(效率更高)

你可以通过浏览器开发者工具的「网络」面板,筛选XHR/Fetch类型的请求,刷新页面后找到返回表格数据的后端接口,直接请求该接口获取结构化的JSON数据,不需要解析HTML,处理效率更高。请求时注意补充User-Agent、Referer等请求头,避免被接口拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:06:01