Python中如何获取Vanguard API的下一页JSON数据?
获取Vanguard API剩余3条数据的解决方法
我需要从Vanguard的相关API获取第501-503条数据(总共有503条),已经用以下代码成功拿到前500条:
import json import requests api_url = 'https://investor.vanguard.com/investment-products/mutual-funds/profile/api/VFIAX/portfolio-holding/stock.json' get_server_information = requests.get(api_url) json_data = get_server_information.json() pretty_data=json.dumps(json_data,indent=4)
但尝试添加start=501&count=500、page=0/page=1等参数时都失败,仍只返回前500条,比如下面的无效代码:
import json import requests api_url = 'https://investor.vanguard.com/investment-products/mutual-funds/profile/api/VFIAX/portfolio-holding/stock&start=501' get_server_information = requests.get(api_url) json_data = get_server_information.json() pretty_data=json.dumps(json_data,indent=4)
问题根源
- URL格式错误:无效代码里的URL漏掉了
.json后缀,且参数应该用?作为第一个参数的开头,多参数之间用&连接,不能直接用&开头。 - 参数冗余:只需要3条数据,
count设为3即可,无需设为500。
修正后的代码
import json import requests # 正确构造带分页参数的请求URL api_url = 'https://investor.vanguard.com/investment-products/mutual-funds/profile/api/VFIAX/portfolio-holding/stock.json?start=501&count=3' response = requests.get(api_url) json_data = response.json() # 格式化输出结果 pretty_data = json.dumps(json_data, indent=4) print(pretty_data)
额外排查方向
如果还是无法获取目标数据,可以:
- 检查API响应中的元数据(比如
totalHolding、pagination字段),确认分页参数的正确名称(部分API会用offset代替start)。 - 添加模拟浏览器的请求头,避免被服务器拦截:
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' } response = requests.get(api_url, headers=headers)
内容的提问来源于stack exchange,提问作者Rsm
相关产品推荐
相关产品推荐

