【數(shù)據(jù)】用python爬取臺(tái)灣氣象網(wǎng)站氣象日?qǐng)?bào)表
為了獲取中國(guó)臺(tái)灣地區(qū)的氣象站點(diǎn)的平均風(fēng)速數(shù)據(jù)(每個(gè)整點(diǎn)前10min平均風(fēng)速)
這個(gè)10分鐘平均風(fēng)速應(yīng)該和大陸地區(qū)的10min平均風(fēng)速是一樣的(不知道大陸地區(qū)是否是10min滑動(dòng)平均得到,需要再確認(rèn))
網(wǎng)站提供逐站日?qǐng)?bào)表、月報(bào)表、年報(bào)表,可下載表格存儲(chǔ)為csv文件。年最大平均10min風(fēng)速,只能通過(guò)下載所有日?qǐng)?bào)表,統(tǒng)計(jì)逐時(shí)數(shù)據(jù)才能得到。
但一頁(yè)一頁(yè)點(diǎn)擊下載太慢了,就想通過(guò)python爬一下。同個(gè)站點(diǎn)不同日期日?qǐng)?bào)表的url都是按時(shí)間排列的,所以只需要用個(gè)循環(huán),批量打開這些網(wǎng)頁(yè)并逐行每張表格的數(shù)據(jù),并存儲(chǔ),便可獲得所需數(shù)據(jù)。
因?yàn)闆](méi)有爬蟲經(jīng)驗(yàn),python用得也一般,在網(wǎng)上摘摘抄抄一些代碼縫縫補(bǔ)補(bǔ)弄了個(gè)簡(jiǎn)易版程序,爬到的數(shù)據(jù)因?yàn)椴荒茏R(shí)別繁體中文,繁體中文部分是亂碼,也請(qǐng)高手有緣看見,能指教一番。
# 導(dǎo)入庫(kù)
import pandas as pd
import datetime
import random
import time
def get_date_range(begin_date, end_date):
? ? # 定義日期函數(shù)
? ? date_list = []
? ? while begin_date <= end_date:
? ? ? ? date_list.append(begin_date)
? ? ? ? begin_date_object = datetime.datetime.strptime(begin_date, "%Y-%m-%d")
? ? ? ? days1_timedelta = datetime.timedelta(days=1)
? ? ? ? begin_date = (begin_date_object + days1_timedelta).strftime("%Y-%m-%d")
? ? return date_list
# 確定需要的數(shù)據(jù)時(shí)段
begin_date = "2011-01-01"
end_date = "2013-12-31"
date_list = get_date_range(begin_date, end_date)
print(date_list)
# 建立空白DataFrame
df1 = pd.DataFrame()
df2 = pd.DataFrame()
# 建立爬取網(wǎng)址合集urls
url_ori = 'https://e-service.cwb.gov.tw/HistoryDataQuery/DayDataController.do?command=viewMain&station=467300&stname=%25E6%259D%25B1%25E5%2590%2589%25E5%25B3%25B6&datepicker='
url_end = '&altitude=43.0m#'
for i in range(0,len(date_list)):
? ? urls = [url_ori + date_list[i] + url_end]
? ? print(urls)
# 依次爬取每一頁(yè)的表格數(shù)據(jù)并append
? ? for j, url in enumerate(urls):
? ? ? ? df1 = pd.concat(pd.read_html(url),axis=0)#縱向拼接(concat(axis=0)或append()
? ? ? ? df2 = pd.concat([df2,df1],axis=0)
# 數(shù)據(jù)導(dǎo)出到CSV
df2.to_csv('d:/dongjidao_'+end_date+'.csv',? index=False)