Python调用API获取新冠疫苗数据遇400错误求助
解决新冠疫苗接种数据API调用400错误问题
你的代码存在几个关键问题,导致返回400错误,以下是修正方案:
问题分析
- URL格式错误:原URL中
datavaccin- covid.ameli.fr部分有多余空格,会被解析为无效地址 - 请求方法错误:该API仅支持GET请求,你误用了POST方法
- 参数重复传递:URL中已经包含了
dataset、facet等参数,又在JSON请求体中重复发送,导致参数冲突
修正后的代码
import requests import pandas as pd # 修正后的API基础地址,移除多余空格 base_url = 'https://datavaccin-covid.ameli.fr/api/records/1.0/search/' # 整理请求参数,用字典形式传递更清晰 request_params = { 'dataset': 'donnees-de-vaccination-par-commune', 'rows': 10, 'start': 0, # 多个facet参数用列表传递,requests会自动处理为重复的查询参数 'facet': [ 'semaine_injection', 'commune_residence', 'libelle_commune', 'classe_age', 'libelle_classe_age' ], 'refine.commune_residence': '13001', 'format': 'json', 'timezone': 'UTC' } # 使用GET请求发送参数 response = requests.get(base_url, params=request_params) # 处理响应 if response.status_code == 200: data = response.json() # 提取每条记录的字段数据,转为DataFrame records = [item['fields'] for item in data['records']] df = pd.DataFrame(records) print(df) else: print(f"请求失败,状态码: {response.status_code}") print(response.text)
关键说明
- 该API遵循标准的OpenDataSoft接口规范,所有查询参数都通过URL查询字符串传递,无需POST请求体
- 使用
requests.get()的params参数可以自动处理多值参数(如多个facet),避免手动拼接URL的错误 - 若需要获取更多数据,可调整
rows和start参数实现分页查询
内容的提问来源于stack exchange,提问作者adrenal
相关产品推荐
相关产品推荐

