【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')


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这里提供一个简单的Python脚本来实现您的需求。请先确保已经注册并获取了和天气APIAPI Key。 首先,我们需要安装 requests 和 openpyxl 两个库,可以通过以下命令安装: ``` pip install requests openpyxl ``` 然后,可以使用以下代码来实现您的需求: ```python import requests import json import openpyxl # 填入您的和天气API Key API_KEY = 'YOUR_API_KEY' # 填入您需要查询的城代码,可以在和天气官网上查找 CITY_CODES = { '沈阳': '101070101', '大连': '101070201', '鞍山': '101070301', '抚顺': '101070401', '本溪': '101070501', '丹东': '101070601', '锦州': '101070701', '营口': '101070801', '阜新': '101070901', '辽阳': '101071001', '盘锦': '101071301', '铁岭': '101071101', '朝阳': '101071201', '葫芦岛': '101071401' } # 创建一个Excel文件 wb = openpyxl.Workbook() ws = wb.active # 写入表头 ws.append(['城', '日期', '天气状况', '最高气温', '最低气温']) # 遍历城代码,请求天气信息并写入Excel文件 for city, code in CITY_CODES.items(): url = f'https://devapi.qweather.com/v7/weather/3d?location={code}&key={API_KEY}' response = requests.get(url) data = json.loads(response.text) # 解析天气信息 for day in data['daily']: date = day['fxDate'] text = day['textDay'] temp_max = day['tempMax'] temp_min = day['tempMin'] # 写入Excel文件 ws.append([city, date, text, temp_max, temp_min]) # 保存Excel文件 wb.save('weather.xlsx') ``` 在代码中,我们首先定义了您的和天气API Key 和需要查询的城代码。然后,我们使用 requests 库向和天气API发送请求,获取天气信息。接着,我们使用 openpyxl 库创建一个Excel文件,并将天气信息写入表格中。最后,我们保存Excel文件。 运行代码后,您将得到一个名为 weather.xlsx 的Excel文件,其中包含了您查询城天气信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值