【python】使用和风天气API爬取一个市多个区的天气预报并写入excel表里

自己完成的第一个实例,初学python,还有许多不懂的地方,望大佬们指正

获取和风天气的账号和key

这里就不多赘述了,网上教程也有

使用python中的openpyxl库对表格进行操作

首先尝试将python和excel表格结合,在其中输入第一行的标题,我还合并了一下第一列的单元格,方便统计地区,设置了单元格的长宽和字号大小
创建表格
输入列标题

使用request库,与API相结合,获取地理位置和天气等信息

和风天气只能免费获取三天的天气预报,把武汉市三日天气预报直接获取并存入表格中,稍微难一点的地方就在于locationID的循环输出了,这里我把locationID的值单独写在了一个函数里,并存在列表里,给定一个返回值
获取ID值

获取城市信息
获取天气预报并保存
enumerate() 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。这样的话,就获得了索引值下标和我需要的ID值了,索引下标用于循环,ID值传给location参数。
记得要给row也加个变量,不然会造成单元格写入的时候一直覆盖前三行,由于locid是下标索引值,所以直接+3*locid就可以了
输出成功!获取的是武汉市和武汉市包含的区的三日天气预报
输出结果

写在最后

这个项目是我第一次做,然后也参考了一些别人的代码,有什么不对的地方还望大家多多包涵qwq

源码

from openpyxl import load_workbook
from openpyxl.styles import Font
import openpyxl
import requests
import numpy as np

def get_xlsx(xlsxname):
    wb = load_workbook(xlsxname)
    ws = wb.active  # 激活 worksheet
    # 设置字体为“宋体”,大小为11,bold为加粗,italic为斜体
    font = Font(u'宋体', size=21, bold=True, italic=True, strike=False, )
    ws["A1"].font = font
    ws.merge_cells('A2:A4')
    ws.merge_cells('A5:A7')
    ws.merge_cells('A8:A10')
    ws.merge_cells('A11:A13')
    ws.merge_cells('A14:A16')
    ws.merge_cells('A17:A19')
    ws.merge_cells('A20:A22')
    ws.merge_cells('A23:A25')
    ws.merge_cells('A26:A28')
    ws.merge_cells('A29:A31')
    ws.merge_cells('A32:A34')
    ws.merge_cells('A35:A37')
    ws.merge_cells('A38:A40')
    ws.merge_cells('A41:A43')
    ws.column_dimensions['A'].width = 25  # 列宽
    ws.column_dimensions['B'].width = 25
    ws.column_dimensions['C'].width = 20
    ws.column_dimensions['D'].width = 20
    ws.column_dimensions['E'].width = 20
    ws.column_dimensions['F'].width = 20
    columnsHeader = ["当前地区", "当前日期", "天气", "最高温度", "最低温度", "风力"]
    for i in range(6):
        ws.cell(row=1, column=i + 1, value=columnsHeader[i])  # 写入列标题
    wb.save(xlsxname)

def get_weather(url,key,xlsxname):
    wb = load_workbook(xlsxname)
    ws = wb.active  # 激活 worksheet
    locationlist = get_locdata("https://geoapi.qweather.com/v2/city/lookup?location=wuhan&number=15", 'key')
    for locid,location in enumerate(locationlist,0):
        params = {
            'location': location,
            'key': key,
            'lang': 'zh'
        }
        res = requests.get(url=url, params=params)
        jsondata = res.json()['daily']
        print(locid)
        for i in range(3):
            ws.cell(row=2 + i+3*locid, column=2, value=jsondata[i]['fxDate'])
        for j in range(3):
            ws.cell(row=2 + j+3*locid, column=3, value=jsondata[j]['textDay'])
        for k in range(3):
            ws.cell(row=2 + k+3*locid, column=4, value=jsondata[k]['tempMax'])
        for m in range(3):
            ws.cell(row=2 + m+3*locid, column=5, value=jsondata[m]['tempMin'])
        for n in range(3):
            ws.cell(row=2 + n+3*locid, column=6, value=jsondata[n]['windDirDay'] + jsondata[n]['windScaleDay'] + '级')
    wb.save(xlsxname)  # 保存表格
def get_location(url,key,xlsxname):
    wb = load_workbook(xlsxname)
    ws = wb.active  # 激活 worksheet
    location = ''
    params = {
        #'location': location,
        'key': key,
        'lang': 'zh'
    }
    res = requests.get(url=url, params=params)
    locdata = res.json()['location']
    for i, j in zip(range(0, 40, 3), range(15)):
        ws.cell(row=2 + i, column=1, value=locdata[j]['name'])
        #print(i)
        #print(locdata[j]['id'])
    wb.save(xlsxname)  # 保存表格

def get_locdata(url,key):
    location = ''
    params = {
        'location': location,
        'key': key,
        'lang': 'zh'
    }
    res = requests.get(url=url, params=params)
    locdata = res.json()['location']
    locationid=list()
    for i in range(14):
        locationid.append(locdata[i]['id'])
    return locationid




if __name__ == '__main__':
    get_locdata("https://geoapi.qweather.com/v2/city/lookup?location=wuhan&number=15", 'key')
    get_xlsx("天气.xlsx")
    get_weather("https://devapi.qweather.com/v7/weather/3d?", 'key', "天气.xlsx")
    get_location("https://geoapi.qweather.com/v2/city/lookup?location=wuhan&number=15",'key',"天气.xlsx")
print('ok')


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值