【数据】用python爬取台湾气象网站气象日报表
为了获取中国台湾地区的气象站点的平均风速数据(每个整点前10min平均风速)
这个10分钟平均风速应该和大陆地区的10min平均风速是一样的(不知道大陆地区是否是10min滑动平均得到,需要再确认)
网站提供逐站日报表、月报表、年报表,可下载表格存储为csv文件。年最大平均10min风速,只能通过下载所有日报表,统计逐时数据才能得到。
但一页一页点击下载太慢了,就想通过python爬一下。同个站点不同日期日报表的url都是按时间排列的,所以只需要用个循环,批量打开这些网页并逐行每张表格的数据,并存储,便可获得所需数据。
因为没有爬虫经验,python用得也一般,在网上摘摘抄抄一些代码缝缝补补弄了个简易版程序,爬到的数据因为不能识别繁体中文,繁体中文部分是乱码,也请高手有缘看见,能指教一番。
# 导入库
import pandas as pd
import datetime
import random
import time
def get_date_range(begin_date, end_date):
# 定义日期函数
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
# 确定需要的数据时段
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()
# 建立爬取网址合集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)
# 依次爬取每一页的表格数据并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)
# 数据导出到CSV
df2.to_csv('d:/dongjidao_'+end_date+'.csv', index=False)