Python期末大作业 | 您所在的位置:网站首页 › python爬取天气后报 › Python期末大作业 |
前言
嗨喽,大家好呀~这里是爱看美女的茜茜呐 知识点:动态数据抓包 requests发送请求 结构化+非结构化数据解析 一、开发环境:所使用软件工具: python 3.8 运行代码 pycharm 2022.3.2 辅助敲代码 专业版 需安装第三方模块: requests 发送请求 pip install requests parsel 解析数据 pip install parsel 第三方模块安装: win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车 在pycharm中点击Terminal(终端) 输入安装命令 如果出现爆红, 可能是因为 网络连接超时, 可切换国内镜像源,命令如下: pip install -i https://pypi.doubanio.com/simple/ requestspython资料、源码、教程\福利皆: 点击此处跳转文末名片获取 二、获取数据导入模块 import requests # 发送请求要用的模块 需要额外安装的 import parsel import csv f = open('天气.csv', mode='a', encoding='utf-8', newline='') csv_writer = csv.writer(f) csv_writer.writerow(['日期', '最高温度', '最低温度', '天气', '风向', '城市']) city_list = [54511, 58362, 59287, 59493] for city in city_list: city_name = '' if city == 54511: city_name = '北京' elif city == 58362: city_name = '上海' elif city == 59287: city_name = '广州' elif city == 59493: city_name = '深圳' for year in range(2013, 2023): for month in range(1, 13): 完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777” url = f'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D={city}&areaInfo%5BareaType%5D=2&date%5Byear%5D={year}&date%5Bmonth%5D={month}' 发送请求 response = requests.get(url=url) 获取数据 html_data = response.json()['data'] 解析数据 select = parsel.Selector(html_data) trs = select.css('.history-table tr') # 拿到31个tr for tr in trs[1:]: # 第一个表头不要 tds = tr.css('td::text').getall() # 针对每个tr进行提取 取出所有的td里面的内容 tds.append(city_name) # 把城市追加到列表里面 print(tds) 保存数据 csv_writer.writerow(tds) 数据可视化导入包 import pandas as pd import datetime from pyecharts import options as opts from pyecharts.charts import * from pyecharts.commons.utils import JsCode读入数据 data = pd.read_csv('天气.csv') data数据预览 data.sample(5) data.info()分割日期/星期 data[['日期','星期']] = data['日期'].str.split(' ',expand=True,n=1) data去除多余字符 data[['最高温度','最低温度']] = data[['最高温度','最低温度']].apply(lambda x: x.str.replace('°','').replace('', '0')) data.head()计算下雪天气 data.loc[data['天气'].str.contains('雪'),'下雪吗']='是' data.fillna('否',inplace=True)分割日期时间 data['日期'] = pd.to_datetime(data['日期']) data[['最高温度','最低温度']] = data[['最高温度','最低温度']].astype('int') data['年份'] = data['日期'].dt.year 完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777” data['月份'] = data['日期'].dt.month data['日'] = data['日期'].dt.day # 预览 data.sample(5)各城市初雪的时间 s_data = data[data['下雪吗']=='是'] s_data[(s_data['月份']>=9)].groupby('年份').first().reset_index()各城市下雪天气分布 s_data.groupby(['城市','年份'])['日期'].count().to_frame('下雪天数').reset_index()做透视表 data_bj = data[(data['年份'] == 2021) & (data['城市'] == '北京')] data_bj = data_bj.groupby(['月份','天气'], as_index=False)['日期'].count() data_pivot = pd.pivot(data_bj, values='日期', index='月份', columns='天气') data_pivot = data_pivot.astype('float') # 按照 索引年月倒序排序 data_pivot.sort_index(ascending=False,inplace=True) data_pivot北上广深2021年10月份天气热力图分布 import matplotlib.pyplot as plt import matplotlib.colors as mcolors import seaborn as sns #设置全局默认字体 为 雅黑 plt.rcParams['font.family'] = ['Microsoft YaHei'] # 设置全局轴标签字典大小 plt.rcParams["axes.labelsize"] = 14 # 设置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei', 'SimHei']}) # 设置画布长宽 和 dpi plt.figure(figsize=(18,8),dpi=100) # 自定义色卡 cmap = mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) # 绘制热力图 ax = sns.heatmap(data_pivot, cmap=cmap, vmax=30, annot=True, # 热力图上显示数值 linewidths=0.5, ) # 将x轴刻度放在最上面 ax.xaxis.set_ticks_position('top') plt.title('北京最近10个月天气分布',fontsize=16) #图片标题文本和字体大小 plt.show() data_gz= data[(data['年份'] == 2021) & (data['城市'] == '广州')] data_gz = data_gz.groupby(['月份','天气'], as_index=False)['日期'].count() data_sz= data[(data['年份'] == 2021) & (data['城市'] == '深圳')] 完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777” data_sz = data_sz.groupby(['月份','天气'], as_index=False)['日期'].count() data_sh= data[(data['年份'] == 2021) & (data['城市'] == '上海')] data_sh = data_sh.groupby(['月份','天气'], as_index=False)['日期'].count() data_pivot_gz = pd.pivot(data_gz, values='日期', index='月份', columns='天气') data_pivot_gz = data_pivot_gz.astype('float') # 按照 索引年月倒序排序 data_pivot_gz.sort_index(ascending=False,inplace=True) #设置全局默认字体 为 雅黑 plt.rcParams['font.family'] = ['Microsoft YaHei'] # 设置全局轴标签字典大小 plt.rcParams["axes.labelsize"] = 14 # 设置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei', 'SimHei']}) # 设置画布长宽 和 dpi plt.figure(figsize=(18,8),dpi=100) # 自定义色卡 cmap = mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) # 绘制热力图 ax_sz = sns.heatmap(data_pivot_gz, cmap=cmap, vmax=31, annot=True, # 热力图上显示数值 linewidths=0.5, ) # 将x轴刻度放在最上面 ax_sz.xaxis.set_ticks_position('top') plt.title('广州最近10个月天气分布',fontsize=16) #图片标题文本和字体大小 plt.show() data_pivot_sh = pd.pivot(data_sh, values='日期', index='月份', columns='天气') data_pivot_sh = data_pivot_sh.astype('float') # 按照 索引年月倒序排序 data_pivot_sh.sort_index(ascending=False,inplace=True) #设置全局默认字体 为 雅黑 plt.rcParams['font.family'] = ['Microsoft YaHei'] # 设置全局轴标签字典大小 plt.rcParams["axes.labelsize"] = 14 # 设置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei', 'SimHei']}) # 设置画布长宽 和 dpi 完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777” plt.figure(figsize=(18,8),dpi=100) # 自定义色卡 cmap = mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) # 绘制热力图 ax_sz = sns.heatmap(data_pivot_sh, cmap=cmap, vmax=31, annot=True, # 热力图上显示数值 linewidths=0.5, ) # 将x轴刻度放在最上面 ax_sz.xaxis.set_ticks_position('top') plt.title('上海最近10个月天气分布',fontsize=16) #图片标题文本和字体大小 plt.show() 尾语感谢你观看我的文章呐~本次航班到这里就结束啦 🛬 希望本篇文章有对你带来帮助 🎉,有学习到一点知识~ 躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。 最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇 |
CopyRight 2018-2019 实验室设备网 版权所有 |