python天气爬虫分析 (python爬虫的天气预报系统)

前言

今天为大家介绍Python+Excel制作天气预报表实战项目,非常有趣,废话不多说。

Let’s start happily

python爬虫信息分析可视化,python爬取天气预报数据并可视化

天气预报

开发工具

Python版本: 3.6.4

相关模块:

xlwings模块

requests模块

pathlib模块

xlwings模块

json模块

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

python爬虫信息分析可视化,python爬取天气预报数据并可视化

数据表格

文中完整版代码,评论留言获取。

具体操作可以看下图~

python爬虫信息分析可视化,python爬取天气预报数据并可视化

操作如图

在城市栏输入杭州,点击查询按钮,表格的数据就会发生变化,的确是杭州的天气预报。

① 数据获取

既然是天气预报,那肯定是需要天气数据的。

找了一圈国内开放的天气API接口,大多都是需要注册,小F果断放弃。

腾讯倒是有个不错的,可惜接口信息不太完整,没有相应的数据说明。

地址:tianqi.qq.com/

接口地址:wis.qq.com/weather/common

python爬虫信息分析可视化,python爬取天气预报数据并可视化

数据获取

最终选择了一个国外的天气API接口。

地址:www.metaweather.com/zh/

python爬虫信息分析可视化,python爬取天气预报数据并可视化

天气API接口

并没有提供国内所有的城市,目前只有10个城市。

所以要想城市多一些,腾讯的天气接口还是可以考虑的。

一共是有10种天气状态,并且提供了相关的天气状态图片,可以供我们使用。

图片已经*载下**下来了,需要的小伙伴可以文末获取

python爬虫信息分析可视化,python爬取天气预报数据并可视化

10种天气状态

首先通过查询,获取城市的ID值

python爬虫信息分析可视化,python爬取天气预报数据并可视化

城市的ID值

然后根据ID值,再去获取对应的天气信息

python爬虫信息分析可视化,python爬取天气预报数据并可视化

获取对应的天气信息

相关名称的中英文对照如下

# 天气--中英文名对照
weather = {
    'Snow': '雪',
    'Sleet': '雨夹雪',
    'Hail': '冰雹',
    'Thunderstorm': '雷阵雨',
    'Heavy Rain': '大雨',
    'Light Rain': '小雨',
    'Showers': '阵雨',
    'Heavy Cloud': '阴',
    'Light Cloud': '多云',
    'Clear': '晴'
}

# 城市--中英文名对照
citys = {
    '北京': 'Beijing',
    '成都': 'Chengdu',
    '东莞': 'Dongguan',
    '广州': 'Guangzhou',
    '杭州': 'Hangzhou',
    '香港': 'Hong Kong',
    '上海': 'Shanghai',
    '深圳': 'Shenzhen',
    '天津': 'Tianjin',
    '武汉': 'Wuhan'
}

② 创建表格

安装xlwings库,并且使用命令行创建项目

python爬虫信息分析可视化,python爬取天气预报数据并可视化

创建项目

其中weatherapp.py的文件内容如下

python爬虫信息分析可视化,python爬取天气预报数据并可视化

内容如下

上图为Mac电脑的设置,Windows电脑设置起来也很简单,具体可以百度

通过点击开发工具选项,我们可以使用Excle的Visual Basic 编辑器(VBA),还能插入按钮(查询按钮)

python爬虫信息分析可视化,python爬取天气预报数据并可视化

插入按钮

然后我在表格中插入一个点击按钮

python爬虫信息分析可视化,python爬取天气预报数据并可视化

点击按钮

选择宏名称为SampleCall,宏的位置为当前工作簿

python爬虫信息分析可视化,python爬取天气预报数据并可视化

当前工作簿

点击按钮1,A1单元格出现内容Hello xlwings!

python爬虫信息分析可视化,python爬取天气预报数据并可视化

Hello xlwings!

再次点击,A1单元格内容变为Bye xlwings!

python爬虫信息分析可视化,python爬取天气预报数据并可视化

Bye xlwings!

也就意味着,修改weatherapp.py文件的代码,即可实现Excel的交互操作

下面对表格进行页面设计,毕竟要让表格好看起来

python爬虫信息分析可视化,python爬取天气预报数据并可视化

Excel的交互操作

设置表格的行高、列宽、背景色、固定文字内容等信息

将单元格C3名称设置为city_name,插入6张太阳图片,排列在单元格C9~H9处,居中对齐,图片也改名为no.1~no.6

修改weatherapp.py文件代码如下

import json
from pathlib import Path
import requests
import xlwings as xw

# 天气--中英文名对照
weather = {
    'Snow': '雪',
    'Sleet': '雨夹雪',
    'Hail': '冰雹',
    'Thunderstorm': '雷阵雨',
    'Heavy Rain': '大雨',
    'Light Rain': '小雨',
    'Showers': '阵雨',
    'Heavy Cloud': '阴',
    'Light Cloud': '多云',
    'Clear': '晴'
}

# 城市--中英文名对照
citys = {
    '北京': 'Beijing',
    '成都': 'Chengdu',
    '东莞': 'Dongguan',
    '广州': 'Guangzhou',
    '杭州': 'Hangzhou',
    '香港': 'Hong Kong',
    '上海': 'Shanghai',
    '深圳': 'Shenzhen',
    '天津': 'Tianjin',
    '武汉': 'Wuhan'
}


def main():
    # 通过runpython从excel中调用python函数
    wb = xw.Book.caller()
    sht = wb.sheets[0]

    # 从Excel中读取城市信息
    city_name = citys[sht.range("city_name").value]

    # 获取城市的ID值, 即woeid
    URL_CITY = f"https://www.metaweather.com/api/location/search/?query={city_name}"
    response_city = requests.request("GET", URL_CITY)
    city_title = json.loads(response_city.text)[0]["title"]
    city_id = json.loads(response_city.text)[0]["woeid"]

    # 获取城市的天气信息
    URL_WEATHER = f"https://www.metaweather.com/api/location/{city_id}/"
    response_weather = requests.request("GET", URL_WEATHER)
    weather_data = json.loads(response_weather.text)["consolidated_weather"]

    # 创建空列表, 存储数据
    min_temp = []
    max_temp = []
    weather_state_name = []
    weather_state_abbr = []
    applicable_date = []

    # 处理数据
    for index, day in enumerate(weather_data):
        # 最低温度
        min_temp.append(weather_data[index]["min_temp"])
        # 最高温度
        max_temp.append(weather_data[index]["max_temp"])
        # 天气情况
        weather_state_name.append(weather[weather_data[index]["weather_state_name"]])
        # 天气情况缩写
        weather_state_abbr.append(weather_data[index]["weather_state_abbr"])
        # 日期
        applicable_date.append(weather_data[index]["applicable_date"])

    # 将获取到的值填充到Excel中
    sht.range("C5").value = applicable_date
    sht.range("C6").value = weather_state_name
    sht.range("C7").value = max_temp
    sht.range("C8").value = min_temp
    sht.range("D3").value = city_title

    # 创建列表
    icon_names = ["no.1", "no.2", "no.3", "no.4", "no.5", "no.6"]

    # 设置天气图片路径
    icon_path = Path(__file__).parent / "images"

    # 将天气情况与天气图片进行匹配,更新表格
    for icon, abbr in zip(icon_names, weather_state_abbr):
        image_path = Path(icon_path, abbr + ".png")
        sht.pictures.add(image_path, name=icon, update=True)


if __name__ == "__main__":
    # 设置用于调试caller()的excel文件,可以直接在python里运行
    xw.Book("weatherapp.xlsm").set_mock_caller()
    main()

python爬虫信息分析可视化,python爬取天气预报数据并可视化

此时我们打开Excel表格,在城市栏输入10个城市中的一个,然后点击查询按钮,天气就会更新。接下来几天,广州都是大暴雨,广州的小伙伴可要注意了~

最后

为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。

里面有适合小白新手的全套资料给到大家~

快来和小编一起成长进步吧!

① 100+多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 爬虫项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

获.得源码 教程 的方式

转/发/本文,私信: 视频

即可获取!

↓↓↓ 不会私信地看下图

↓↓↓

python爬虫信息分析可视化,python爬取天气预报数据并可视化

↑↑↑ 不会私信地看上图

↑↑↑