首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Python使用API创建数据集

通过Python使用API创建数据集
EN

Stack Overflow用户
提问于 2019-04-01 18:21:11
回答 1查看 576关注 0票数 0

我正在尝试创建一个从API检索的5年天气数据集

代码语言:javascript
运行
复制
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)

它显示一天数据。但是我需要从Api收集5年的数据,所以我使用

代码语言:javascript
运行
复制
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)

它给了我们

代码语言:javascript
运行
复制
JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我如何从Api收集5年的数据?

EN

回答 1

Stack Overflow用户

发布于 2019-04-01 18:54:18

在不了解API内部原理的情况下,我可以建议在5年内每天执行一次每日调用,并将每日数据附加到列表中:

代码语言:javascript
运行
复制
import datetime
import requests

定义一个函数,该函数将返回给定datetime和end_date之间的所有日期的生成器(而不是列表),它必须作为datetime对象输入:

代码语言:javascript
运行
复制
def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + datetime.timedelta(n)

示例取值:

代码语言:javascript
运行
复制
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收集日常数据,每天一个请求:

代码语言:javascript
运行
复制
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'])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55452835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档