使用Python采集天气数据,做可视化分析【附源码】

知识点:

  • 动态数据抓包
  • requests发送请求
  • 结构化+非结构化数据解析

开发环境:

  • python 3.8 运行代码
  • pycharm 2021.2 辅助敲代码
  • requests

如果安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests)回车
  2. 在pycharm中点击Terminal(终端) 输入安装命令

代码实现:

  1. 发送请求
  2. 获取数据
  3. 解析数据
  4. 保存数据

源码. 点击即可领取

import requests     # 第三方模块 提前安装  发送请求 (Python里面浏览器)  爆红是因为你没有安装模块
# 如果安装了 但还是爆红是因为什么呢? 解释器在pycharm里面配置的不对
import parsel
import csv
# 翻译插件

with open('天气.csv', mode='a', encoding='utf-8', newline='') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(["日期", "最高温度", "最低温度", "天气", "风向", "城市"])
city_list = [54511, 58362, 59287, 59493]
for city in city_list:
    for year in range(2011, 2022):
        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)
# <Response [200]>: 请求成功

2. 获取数据

# json数据传输格式
json_data = response.json()
# 字典类型数据

3.解析数据

 # 结构化数据解析
 html_data = json_data['data']
 selector = parsel.Selector(html_data)
 # 正则 css xpath json字典数据解析
 tr_list = selector.css('.history-table tr')
 # tr_list[1:] 从列表的第二个元素开始取
 for tr in tr_list[1:]:
    # <X>fhwaeuifhwiuf</X>
    td = tr.css('td::text').getall()
    if td[2] == '°':
        td[2] = td[1]
    if city == 54511:
        td.append("北京")
    elif city == 58362:
        td.append("上海")
    elif city == 59287:
        td.append("广州")
    elif city == 59493:
        td.append("深圳")
    print(td)
    # 文件名 写入方式 追加写入  编码方式 utf-8  数据空行
    with open('天气.csv', mode='a', encoding='utf-8', newline='') as f:
        csv_writer = csv.writer(f)
        csv_writer.writerow(td)

数据分析代码

导入包

源码. 点击领取即可
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('°',''))
data.head()

计算下雪天气

data.loc[data['天气'].str.contains('雪'),'下雪吗']='是'
data.fillna('否',inplace=True)

分割日期时间

data['日期'] = pd.to_datetime(data['日期'])
data[['最高温度','最低温度']] = data[['最高温度','最低温度']].astype('int')

data['年份'] = data['日期'].dt.year
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(['城市','年份'])['日期']
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值