前言
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
知识点:
-
动态数据抓包
-
requests发送请求
-
结构化+非结构化数据解析
开发环境:
开发环境:
-
python 3.8 运行代码
-
pycharm 2022.3.2 辅助敲代码 专业版
模块使用:
-
requests 发送请求 pip install requests
-
parsel 解析数据 pip install parsel
第三方模块安装:
win + R 输入cmd 输入安装命令 pip install 模块名
(如果你觉得安装速度比较慢, 你可以切换国内镜像源)
采集弹幕代码展示
完整源码、教程 点击此处跳转文末名片获取 ,我都放在这里了。
数据获取代码
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):
url = f'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D={city}&areaInfo%5BareaType%5D=2&date%5Byear%5D={year}&date%5Bmonth%5D={month}'
# 1. 发送请求
response = requests.get(url=url)
# 2. 获取数据
html_data = response.json()['data']
# 3. 解析数据
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)
# 4. 保存数据
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_gz= data[(data['年份'] == 2021) & (data['城市'] == '广州')]
data_gz = data_gz.groupby(['月份','天气'], as_index=False)['日期'].count()
data_sz= data[(data['年份'] == 2021) & (data['城市'] == '深圳')]
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_sz = pd.pivot(data_sz,
values='日期',
index='月份',
columns='天气')
data_pivot_sz = data_pivot_sz.astype('float')
# 按照 索引年月倒序排序
data_pivot_sz.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_sz, 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
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()
尾语 💝
好了,今天的分享就差不多到这里了!
完整代码、更多资源、疑惑解答直接点击下方名片自取即可。
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!