如何用Python访问指定URL下载每日更新的最新CSV文件?
方案说明
这类公共政府开放接口会对非浏览器类的请求做基础校验,之前直接用wget、裸requests、urllib发送的请求因为没有携带合法的客户端标识,会被服务端拦截返回403错误,无法获取CSV内容。
核心实现逻辑
- 构造和日常浏览器访问一致的请求头,模拟合法客户端请求,绕过基础校验
- 采用流式读取的方式保存文件,避免大文件占用过多内存
- 每次执行请求时直接拉取服务端最新生成的CSV内容,无需处理缓存逻辑
可直接运行的代码示例
import requests # 目标接口URL url = 'https://coronavirus.data.gov.uk/api/v1/data?filters=areaType=overview&structure=%7B%22areaType%22:%22areaType%22,%22areaName%22:%22areaName%22,%22areaCode%22:%22areaCode%22,%22date%22:%22date%22,%22newPeopleVaccinatedFirstDoseByPublishDate%22:%22newPeopleVaccinatedFirstDoseByPublishDate%22,%22cumPeopleVaccinatedFirstDoseByPublishDate%22:%22cumPeopleVaccinatedFirstDoseByPublishDate%22%7D&format=csv' # 匹配浏览器的请求头配置 request_headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 'Accept': 'text/csv,application/csv,*/*', 'Accept-Language': 'en-GB,en;q=0.9', 'Connection': 'keep-alive' } # 发送请求 response = requests.get(url, headers=request_headers, stream=True, timeout=30) response.raise_for_status() # 请求失败直接抛出异常,方便排查问题 # 保存到本地文件 save_path = 'uk_covid_vaccine_overview.csv' with open(save_path, 'wb') as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) print(f"最新CSV文件已保存至: {save_path}")
注意事项
- 不要使用requests库默认的请求头,其自带的
python-requests/x.x标识会被接口直接拦截 - 该接口无额外鉴权要求,配置上述请求头后即可正常获取每日更新的数据
- 如果后续碰到接口限流,可在请求前添加1-3秒的随机延时,无需复杂的反爬处理逻辑
内容的提问来源于stack exchange,提问作者tristar8
相关产品推荐
相关产品推荐

