如何用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
相关产品推荐
相关产品推荐

