zoukankan      html  css  js  c++  java
  • 用API爬取天气预报数据

    1.注册免费API和阅读技术文档:

      注册地址:https://console.heweather.com

      文档地址:https://www.heweather.com/documents/api-url

    在文档中可以看到很多参数

    返回的是json数据

    2.获取API数据:

    获取城市列表:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:XXC
    import requests
    url='https://cdn.heweather.com/china-city-list.txt'
    strhtml = requests.get(url)
    data = strhtml.text
    data1 = data.split("
    ")
    for i in range(6): #因为前六行不需要,所以没有打印
        data1.remove(data1[0])
    for item in data1:
        print(item[2:13])

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:XXC
    import requests
    import time
    url='https://cdn.heweather.com/china-city-list.txt'
    strhtml = requests.get(url)
    data = strhtml.text
    data1 = data.split("
    ")
    for i in range(6): #因为前六行不需要,所以没有打印
        data1.remove(data1[0])
    for item in data1:
        # print(item[2:13])
        url = 'https://free-api.heweather.com/v5/forecast?city='+item[2:13]+'&key=7d0daf2a85f64736a42261161cd3060b'
        strhtml = requests.get(url)
        time.sleep(1)
        print(strhtml.text)

    获取当天温度的最大值:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:XXC
    import requests
    import time
    url='https://cdn.heweather.com/china-city-list.txt'
    strhtml = requests.get(url)
    data = strhtml.text
    data1 = data.split("
    ")
    for i in range(6): #因为前六行不需要,所以没有打印
        data1.remove(data1[0])
    for item in data1:
        # print(item[2:13])
        url = 'https://free-api.heweather.com/v5/forecast?city='+item[2:13]+'&key=7d0daf2a85f64736a42261161cd3060b'
        strhtml = requests.get(url)
        time.sleep(1)
        dic = strhtml.json()
        for item in dic["HeWeather5"][0]["daily_forecast"]:
            print(item["tmp"]["max"])

    往mysql数据库中存入id,city,cnty三个字段数据:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:XXC
    import json
    import pymysql
    import requests
    import time
    
    def prem(db):
        cursor = db.cursor()
        cursor.execute("SELECT VERSION()")
        data = cursor.fetchone()
        print("Database version : %s " % data)  # 结果表明已经连接成功
        cursor.execute("DROP TABLE IF EXISTS weatherInfo")  # 如果存在表就删除原表
        sql = """CREATE TABLE weatherInfo (
                 id varchar(20),
                 city varchar(20),
                 cnty varchar(20))"""
        cursor.execute(sql)  # 根据需要创建一个表格
    
    def reviewdata_insert(db):
        url = 'https://cdn.heweather.com/china-city-list.txt'
        strhtml = requests.get(url)
        data = strhtml.text
        data1 = data.split("
    ")
        for i in range(6):  # 因为前六行不需要,所以没有打印
            data1.remove(data1[0])
        for item in data1:
            # print(item[2:13])
            url = 'https://free-api.heweather.com/v5/forecast?city=' + item[2:13] + '&key=7d0daf2a85f64736a42261161cd3060b'
            strhtml = requests.get(url)
            time.sleep(1)
            dic = strhtml.json()
            id = dic["HeWeather5"][0]["basic"]["id"]
            city = dic["HeWeather5"][0]["basic"]["city"]
            cnty = dic["HeWeather5"][0]["basic"]["cnty"]
            result=[]
            result.append((id,city,cnty))
            insert_we = "insert into weatherInfo(id,city,cnty) values (%s,%s,%s)"
            cursor = db.cursor()
            cursor.executemany(insert_we, result)
            db.commit()
    
    if __name__ == "__main__":  # 起到一个初始化或者调用函数的作用
        db = pymysql.connect("localhost", "root", "123456", "test", charset='utf8')
        cursor = db.cursor()
        prem(db)
        reviewdata_insert(db)
        cursor.close()

    执行结果:

  • 相关阅读:
    Netty源码剖析-关闭服务
    Netty源码剖析-断开连接
    Netty源码剖析-发送数据
    Netty源码剖析-业务处理
    Netty源码剖析-接受数据
    Netty源码剖析-构建链接
    html中调用silverlight中的方法
    在Silverlight宿主html页面添加按钮无法显示
    win7旗舰版在安装vs2010后向sql2008添加SQL_Server_Management详解
    javascript arguments
  • 原文地址:https://www.cnblogs.com/alex-xxc/p/9767334.html
Copyright © 2011-2022 走看看