如何使用Python提取网站中通过API加载的图表数据 解决405报错
错误原因
405状态码表示你使用了接口不支持的HTTP请求方法,你当前代码用了POST请求,但/charts/data/947接口仅支持GET请求。
API调用规则查询方法
要获取网站未公开的API调用规则,直接用浏览器自带的开发者工具抓包即可:
- 打开目标网页,按F12调出开发者工具,切换到「网络」面板
- 筛选器选择「Fetch/XHR」,刷新页面,就能看到页面加载过程中所有的异步请求
- 逐个查看请求的响应内容,找到返回图表数据的那条请求,就能完整获取它的请求方法、请求头、请求参数、响应格式信息
可运行的Python实现
import requests import pandas as pd import json # 注意:以下Header里的Authorization、Cookie是临时凭证会过期,你需要替换成自己浏览器当前的对应值 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", "Accept": "application/json, text/javascript, */*; q=0.01", "Authorization": "Bearer 替换为你自己的当前Bearer值", "Cookie": "替换为你自己的当前Cookie值", "Referer": "https://en.macromicro.me/charts/947/commodity-ccfi-scfi" } url = "https://en.macromicro.me/charts/data/947" # 将原代码的POST请求改为GET请求 response = requests.get(url, headers=headers) # 直接解析JSON响应,不需要调用BeautifulSoup if response.status_code == 200: data = response.json() # 打印完整数据结构,可根据自身需求提取对应字段 print(json.dumps(data, indent=2, ensure_ascii=False)) # 如需转成DataFrame可根据实际数据结构调整,示例如下: # df = pd.DataFrame(data['data']) # print(df) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")
注意事项
- Header里的
Authorization和Cookie是用户身份凭证,有固定过期时间,每次运行前建议从浏览器开发者工具里重新复制最新值 - 控制请求频率,不要短时间内多次请求,避免触发网站反爬机制被限制访问
- 该网站数据有版权,提取的数据仅限个人学习使用,不要用于商业用途或者公开传播
内容的提问来源于stack exchange,提问作者anarchy
相关产品推荐
相关产品推荐

