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

如何用requests-html读取网页表格并转为Pandas DataFrame?(已遇无数据问题)

解析AAMC动态加载表格为Pandas DataFrame的解决方案

问题根源

你遇到的核心问题是:目标网页的表格数据是动态渲染的。原始HTML仅包含表格的结构框架,实际的医生专科数据是在页面加载完成后,通过JavaScript调用后端API获取并填充到页面中的。因此直接爬取静态HTML(无论是用BeautifulSoup还是requests-html的raw_html)都无法获取到有效数据。

解决方案:直接请求数据接口

通过浏览器开发者工具(Network面板,筛选XHR/Fetch请求),可以找到页面加载表格数据的API接口。该接口返回JSON格式的原始数据,可直接转换为Pandas DataFrame。

完整代码示例

import pandas as pd
import requests

# 数据接口URL(从浏览器抓包获取)
api_url = "https://services.aamc.org/services/workforce-reports/v1/active-physicians/specialties/largest?year=2019"

# 请求头,模拟浏览器访问避免被拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 发送请求获取JSON数据
response = requests.get(api_url, headers=headers)
response.raise_for_status()  # 检查请求是否成功
data = response.json()

# 将JSON数据转换为DataFrame
df = pd.DataFrame(data)

# 查看数据前5行
print(df.head())

代码说明

  • 接口获取:通过浏览器F12打开开发者工具,切换到Network面板,刷新页面后筛选XHR类型请求,找到返回表格数据的接口地址。
  • 请求头设置:添加User-Agent模拟浏览器请求,避免被服务器识别为爬虫而拦截。
  • 数据转换:API返回的JSON是结构化的列表数据,直接传入pd.DataFrame()即可生成格式化的表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:05:21