如何用Python Requests库按年份筛选ISO格式日期的API数据?
解决API筛选某年份ISO日期数据的问题
你遇到的核心问题是直接传年份作为date参数不符合API的日期格式要求,得根据API支持的筛选方式来调整,分三种常见场景:
1. API支持日期范围查询
很多API会提供start_date/end_date或者类似date__gte(大于等于)、date__lte(小于等于)的参数来限定日期范围。针对2020年的数据,你可以这样设置参数:
import requests params = { 'weather': 'rainy', 'start_date': '2020-01-01', 'end_date': '2020-12-31' } response = requests.get('你的API地址', params=params) data = response.json()
如果API用的是类似Django ORM的查询参数,可能需要这样写:
params = { 'weather': 'rainy', 'date__gte': '2020-01-01', 'date__lte': '2020-12-31' }
2. API支持前缀/模糊匹配
部分API允许用通配符做前缀匹配,比如SQL风格的%或者*作为通配符。你可以尝试传递带通配符的日期值:
params = { 'weather': 'rainy', 'date': '2020%' # 或者 '2020-*',具体看API文档的规则 } response = requests.get('你的API地址', params=params) data = response.json()
有些API还支持专门的前缀查询参数,比如date__startswith:
params = { 'weather': 'rainy', 'date__startswith': '2020' }
3. API不支持任何日期筛选,本地处理
如果API没有提供任何日期筛选能力,只能先拉取所有符合weather: rainy的数据,再在本地筛选出2020年的记录:
import requests params = { 'weather': 'rainy' } response = requests.get('你的API地址', params=params) all_data = response.json() # 筛选2020年的数据(简单前缀匹配) filtered_data = [item for item in all_data if item['date'].startswith('2020')] # 或者用datetime模块解析日期后判断年份(更严谨,避免日期格式异常) from datetime import datetime filtered_data = [] for item in all_data: try: date_obj = datetime.fromisoformat(item['date']) if date_obj.year == 2020: filtered_data.append(item) except ValueError: # 处理格式错误的日期 continue
内容的提问来源于stack exchange,提问作者kunshabba
相关产品推荐
相关产品推荐

