Python實戰 | 爬取天氣信息並數據可視化

Github項目完整源碼地址:https://github.com/xylon666/Visualization

結果展示:

環境配置

IDE:Pycharm

第三方庫:requests,pandas,matplotlib,BeautifulSoup4

瀏覽器:Chrome

爬取頁面:天氣預報網鄭州2020.4月份天氣情況 http://www.tianqihoubao.com/lishi/zhengzhou/month/202004.html

一、爬取信息

頭文件準備

import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
url = "http://www.tianqihoubao.com/lishi/zhengzhou/month/202004.html"

右鍵審查元素,找到主要天氣信息所在的瀏覽器標籤是在<tr>標籤裏

那麼先把這個標籤裏的內容爬下來

res = requests.get(url,headers=headers)
html =  res.content.decode('gbk')        #根據網頁情況選擇解碼方式
#print(html.text)
soup = BeautifulSoup(html,'lxml')
list = soup.find_all('tr')
#print(list)

然後格式化處理並保存起來

dates,conditions,temp = [],[],[]
for i in list[1:]:              #從第二列開始是天氣數據
    data = i.text.split()       #對文字內容進行分段
    #print(data)
    #data[0] = ['2020年04月01日', '陰', '/陰', '13℃', '/', '7℃', '東北風', '3-4級', '/東北風', '3-4級']
    dates.append(data[0])
    conditions.append(data[1:3])
    temp.append(data[3:6])
#print(dates,conditions,temp)
data_mouth = pd.DataFrame()      #通過pandas創建一個數據集,存放天氣信息
data_mouth['日期'] = dates
data_mouth['天氣情況'] = conditions
data_mouth['氣溫'] = temp
#print(data_mouth)

看一下此時data_mouth存儲的信息:

成功獲得了我們需要的內容,然後導入csv文件進行下一步操作

data_mouth.to_csv("鄭州天氣.csv",index=False,encoding='utf-8') #導入到csv文件,不保留行索引

 二、數據可視化

數據可視化需要用到的模塊matplotlib,以及常用配置

import pandas as pd
from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 解決中文問題
plt.rcParams['axes.unicode_minus'] = False  # 解決負號顯示問題

導入csv文件,然後獲得具體的最高溫度和最低溫度

data = pd.read_csv("鄭州天氣.csv")

data['最高氣溫'] = data['氣溫'].str.split("'",expand=True)[1]     #extend=True 以'號爲分隔符,將數據分爲n個縱列,並標記id
data['最低氣溫'] = data['氣溫'].str.split("'",expand=True)[5]
# print(data['氣溫'])
# print(data['最高氣溫'])
# print(data['最低氣溫'])

繪圖需要用溫度做Y軸,因此將氣溫轉化爲int類型

data['最高氣溫'] = data['最高氣溫'].map(lambda x:int(x.replace('℃','')))
data['最低氣溫'] = data['最低氣溫'].map(lambda x:int(x.replace('℃','')))
#將氣溫“x℃”轉換爲數字類型,然後使用pandas裏的map函數替換原來的值,方便做Y軸參數
#replace函數,replace(to_replace, value),將前面的值轉化爲後面的值

開始繪圖,具體參數和用法都寫有備註

dates = data['日期']
highs = data['最高氣溫']
lows = data['最低氣溫']

#畫圖 配置參數
fig =  plt.figure(dpi=128,figsize=(10,6))   #設定畫布分辨率,寬和高
plt.plot(dates,highs,c='red',alpha=0.5)     #alpha 透明度,越接近1越不透明
plt.plot(dates,lows,c='blue',alpha=0.5)
plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)
#填充highs和lows之間的空隙

#外圍標籤
plt.title('2020年4月鄭州天氣情況',fontsize=24)          #標題
plt.xlabel("",fontsize=6)                             #繪製X軸
fig.autofmt_xdate()                                   #繪製斜的目標標籤,避免重疊
plt.ylabel("氣溫",fontsize=12)
plt.tick_params(axis='both',which='major',labelsize=10)     #設置座標軸屬性

plt.show()

運行搞定~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章