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
  • 相关阅读:
    pip不是内部或外部命令也不是可运行的程序或批处理文件的问题
    动态规划 leetcode 343,279,91 & 639. Decode Ways,62,63,198
    动态规划 70.climbing Stairs ,120,64
    (双指针+链表) leetcode 19. Remove Nth Node from End of List,61. Rotate List,143. Reorder List,234. Palindrome Linked List
    建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
    链表 206 Reverse Linked List, 92,86, 328, 2, 445
    (数组,哈希表) 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
    重装系统
    java常用IO
    端口
  • 原文地址:https://www.cnblogs.com/chenlove/p/14038562.html
Copyright © 2011-2022 走看看