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

无法使用bs4提取网页表格,能否通过requests获取页面var model数据?

实现方案

完全可以通过requests直接获取目标数据,无需依赖Selenium。你观察到的var model变量就是完整的源数据,直接提取解析即可,具体步骤如下:

  • 第一步:用requests请求目标接口获取页面原始文本
  • 第二步:通过正则匹配提取var model后的JSON字符串
  • 第三步:将JSON字符串转成Python字典,按需提取字段转成表格即可

完整实现代码

import requests
import re
import json
import pandas as pd

# 目标接口地址
url = "https://api.ofx.com/PublicSite.ApiService/SpotRateHistory/allTime/USD/ARS?DecimalPlaces=8&ReportingInterval=yearly"
# 加UA模拟浏览器请求,避免被接口拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

# 发送请求获取响应文本
resp = requests.get(url, headers=headers)
html_text = resp.text

# 正则匹配提取var model后的JSON内容
match_res = re.search(r'var model = (.*?),\s*txt =', html_text, re.S)
if match_res:
    model_json_str = match_res.group(1).strip()
    # 转成Python字典
    model_data = json.loads(model_json_str)
    # 提取历史汇率点直接转DataFrame表格
    history_df = pd.DataFrame(model_data['HistoricalPoints'])
    # 可选:将毫秒时间戳转成可读日期格式
    history_df['PointInTime'] = pd.to_datetime(history_df['PointInTime'], unit='ms')
    # 打印结果验证
    print(history_df)
    # 可以直接导出为csv等格式
    # history_df.to_csv("usd_ars_yearly_rate.csv", index=False)

补充说明

你之前用bs4和pd.read_html拿不到表格是因为表格是前端拿到model数据后动态生成的,原始HTML里只有空的table标签,没有实际内容,直接提取源数据是当前场景下的最优解,效率远高于动态渲染方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:51:01