zoukankan      html  css  js  c++  java
  • 还在担心明天的天气吗?----API爬取各城市天气预报数据

    需要用的链接和网址:

    注册免费API : http://console.heweather.com

    国内城市ID : http://cdn.heweather.com/china-city-list.txt

    接口:https://free-api.heweather.net/s6/weather/forecast?key=xxx&location=xxx
    (key后的xxx填入key,location后的xxx填写城市ID)

    json编辑器: http://www.json.org.cn/tools/JSONEditorOnline/index.htm


    首先,先注册一个免费的API:
    不会的可以看这个 传送,做前两个步骤就可以。

    一:获取国内城市信息

    import requests
    
    
    url = 'http://cdn.heweather.com/china-city-list.txt'  #国内城市ID
    
    
    data = requests.get(url)  #获取网页数据
    
    
    data.encoding = 'utf8' #数据的编码方式为utf8,否则会乱码
    
    
    print(data.text)
    
    
    

    运行结果:


    二:处理数据

    (1)前 6 行的数据是不需要的,应该删除


    (2)在接口的链接中我们发现,还需要在localtion后填入城市ID,从输出结果中可以看出,城市ID在每行的下标第2-12的位置。

    import requests
    
    
    url = 'http://cdn.heweather.com/china-city-list.txt'  #国内城市ID
    
    
    data = requests.get(url)  #获取网页数据
    
    
    data.encoding = 'utf8' #数据的编码方式为utf8,否则会乱码
    
    
    data1 = data.text.split("
    ") #通过split将文本转换为列表
    
    
    for i in range(6):   #删除前6行不需要的数据
        data1.remove(data1[0])
    
    
    for item in data1:  #找出城市ID
        print(item[2:13])
    
    
    

    运行结果:


    三:获取JSON格式的数据

    import requests
    import time
    
    
    url = 'http://cdn.heweather.com/china-city-list.txt'  #国内城市ID
    
    
    data = requests.get(url)  #获取网页数据
    
    
    data.encoding = 'utf8' #数据的编码方式为utf8,否则会乱码
    
    
    data1 = data.text.split("
    ") #通过split将文本转换为列表
    
    
    for i in range(6):   #删除前6行不需要的数据
        data1.remove(data1[0])
    
    
    for item in data1:
        #接口链接中的key后面的xxx改为自己刚刚注册的key,location后加上城市ID
        url = 'https://free-api.heweather.net/s6/weather/forecast?key=xxx&location=' + item[2:13]
    
    
        data2 = requests.get(url)
    
    
        data2.encoding = 'utf8'
    
    
        #time.sleep(1)  #延时函数代码,避免访问服务器过于频繁,每次访问等待1s(这里可以不加)
    
    
        print(data2.text)
    
    
    
    
    
    
    

    运行结果:


    四:解析JSON数据

    (1)打开 JSON在线编辑器,观察数据结构

    (2)通过观察路径,打印需要的信息,例如找出各城市当日的最高和最低气温

    import requests
    import time
    
    
    url = 'http://cdn.heweather.com/china-city-list.txt'  #国内城市ID
    
    
    data = requests.get(url)  #获取网页数据
    
    
    data.encoding = 'utf8' #数据的编码方式为utf8,否则会乱码
    
    
    data1 = data.text.split("
    ") #通过split将文本转换为列表
    
    
    for i in range(6):   #删除前6行不需要的数据
        data1.remove(data1[0])
    
    
    for item in data1:
        #接口链接中的key后面的xxx改为自己刚刚注册的key,location后加上城市ID
        url = 'https://free-api.heweather.net/s6/weather/forecast?key=xxx&location=' + item[2:13]
    
    
        data2 = requests.get(url)
    
    
        data2.encoding = 'utf8'
    
    
        #time.sleep(1)  #避免访问服务器过于频繁,每次访问等待1s(这里可以不加)
    
    
        dic = data2.json()
    
    
        for item in dic["HeWeather6"][0]["daily_forecast"][:1]: #[:1]只要今日天气信息
            result = {
                '城市':dic["HeWeather6"][0]["basic"]["location"],
                '今日最高温度':item["tmp_max"],
                '今日最低温度':item["tmp_min"]
            }
            print(result)
    
    
    

    运行结果:

    本文结束!

    欢迎关注公众号:Python爬虫数据分析挖掘

    记录学习python的点点滴滴;

    回复【开源源码】免费获取更多开源项目源码;

    公众号每日更新python知识和【免费】工具;

    本文已同步到【开源中国】、【腾讯云社区】、【CSDN】;

    耐得住寂寞,才能登得顶
    Gitee码云:https://gitee.com/lyc96/projects
  • 相关阅读:
    MySQL Online DDL导致全局锁表案例分析
    .NET Core教程--给API加一个服务端缓存啦
    任务队列和异步接口的正确打开方式(.NET Core版本)
    .NET Core中使用RabbitMQ正确方式
    .NET Core单元测试之搞死开发的覆盖率统计(coverlet + ReportGenerator )
    没有执行过rm -rf /*的开发不是好运维
    dotnet core在Task中使用依赖注入的Service/EFContext
    可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking
    dpdk中QSBR具体实现
    C语言二级指针底层实现
  • 原文地址:https://www.cnblogs.com/chenlove/p/14038562.html
Copyright © 2011-2022 走看看