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

执行结果:

原文地址:https://www.cnblogs.com/alex-xxc/p/9767334.html