• 用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()

    执行结果:

  • 相关阅读:
    php安全模式笔记
    ./configure,make,make install的作用(转)
    composer自动载入类库的方式
    Specified key was too long; max key length is 1000 bytes
    海量数据中找出前k大数(topk问题)
    斐波那契数列n项的值。(递归和非递归算法Golang实现)
    基于Docker和Golang搭建Web服务器
    Nginx简单介绍以及linux下使用Nginx进行负载均衡的搭建
    php实现商城秒杀
    一致性hash (PHP)
  • 原文地址:https://www.cnblogs.com/alex-xxc/p/9767334.html
Copyright © 2020-2023  润新知