python - 使用带有 Python 的 API 创建数据集
问题描述
我正在尝试创建从 API 检索到的 5 年天气数据集
city=input("enter\n")
ask=input("enter date\n")
date_format = "%Y-%m-%d"
date_time = datetime.strptime(ask, date_format)
print(date_time)
json_data = requests.get(
'http://api.worldweatheronline.com/premium/v1/past-weather.ashx',
params=dict(
key='my key',
q=city,
format='json',
date=ask,
tp='24'
)
).json()
print(json_data)
它显示 0ne 天的数据。但我需要从 Api 收集 5 年的数据,所以我使用
channels = ['maxtempC','maxtempF', 'mintempC','mintempF']
channels_list = []
for channel in channels:
JSONContent = requests.get("http://api.worldweatheronline.com/premium/v1/past-weather.ashx" + channel).json()
channels_list.append([JSONContent['Type'], JSONContent['Temp'], JSONContent['mintem'],JSONContent['views']])
dataset = pd.DataFrame(channels_list)
dataset.sample(5)
它给
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我如何从 Api 收集 5 年的数据?
解决方案
在不了解 API 内部结构的情况下,我可以建议在 5 年内每天调用一次,并将每日数据附加到列表中:
import datetime
import requests
定义一个函数,该函数将为给定的 start_date 和 end_date 之间的所有日子返回一个生成器(不是列表),必须作为 datetime 对象输入:
def daterange(start_date, end_date):
for n in range(int ((end_date - start_date).days)):
yield start_date + datetime.timedelta(n)
示例值:
city="London"
start_date="2019-03-01"
end_date="2019-03-11"
date_format = "%Y-%m-%d"
start_date = datetime.datetime.strptime(start_date, date_format)
end_date = datetime.datetime.strptime(end_date, date_format)
收集从 start_date 到 end_date 的每日数据,每天一个请求:
all_data = []
maxtempC_list = []
maxtempF_list = []
mintempC_list = []
mintempF_list = []
for each_date in daterange(start_date, end_date):
print(each_date.date())
ask = str(each_date.date())
json_data = requests.get(
'http://api.worldweatheronline.com/premium/v1/past-weather.ashx',
params=dict(
key='YOUR_API_KEY',
q=city,
format='json',
date=ask,
tp='24'
)
).json()
print(json_data)
all_data.append(json_data)
maxtempC_list.append(json_data['data']['weather'][0]['maxtempC'])
maxtempF_list.append(json_data['data']['weather'][0]['maxtempF'])
mintempC_list.append(json_data['data']['weather'][0]['mintempC'])
mintempF_list.append(json_data['data']['weather'][0]['mintempF'])
推荐阅读
- r - 如何绘制彼此相邻的图表?
- css - 重叠的网格元素:第二个 div 无法加载
- c# - 如何确保 C# 应用程序从睡眠中醒来后会响应(Windows 10)?
- mongodb - 如何(从客户端的角度)获取使用(和免费)到 MongoDB 的连接数?
- python-3.x - excel中的python与xlwings
- c# - 如何使用 selenium webdriver 获取 html5 文本框错误消息
- swift - 如果#available 没有按预期工作,Swift?
- java - 如何将 toArray 结果转换为 CompletableFuture
[] 类型? - powershell - 如何在 Powershell 中将数据从 XLSX 附加到 XLSX?
- r-markdown - Rmarkdown 未正确显示可折叠面板