一、从网站爬取数据
这种方式爬到的数据有些简陋,毕竟天气预测涉及的因素很多,而我找到的这个网站中只含有那几个字段 。

首先,分析网站:

爬取天气数据--同班同学的毕设数据需要_数据集


爬取天气数据--同班同学的毕设数据需要_数据_02


爬取天气数据--同班同学的毕设数据需要_数据集_03


注意,如下图,网址+年份+日期构成了一个访问的页面:

爬取天气数据--同班同学的毕设数据需要_html_04


解析字段:

爬取天气数据--同班同学的毕设数据需要_html_05


然后构造请求头:

start_url = '填入网站'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}

编写一个生成日期的函数:

"""
获取2011年到目前为止的所有年份和月份。
:return:
"""
print("当前时间:",time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
tmp = time.strftime('%Y%m', time.localtime(time.time()))
print("爬虫爬取的截断时间:",tmp)
date_list = []
for i in range(2011,int(tmp[:4])+1):
for j in range(1,13):
if len(str(j))<2:
f = '0'+str(j)
t = str(i) + f
if int(t) <= int(tmp):
date_list.append(t)
else:
t = str(i) + str(j)
if int(t) <= int(tmp):
date_list.append(t)
# print(date_list)

请求并解析响应:

response = requests.get(url=url, headers=headers)
html = etree.HTML(response.text)
time1 = html.xpath('//div[@class="tian_three"]/ul/li/div[@class="th200"]/text()')
higtest_tmp = html.xpath('//div[@class="tian_three"]/ul/li/div[2]/text()')
lowest_tmp = html.xpath('//div[@class="tian_three"]/ul/li/div[3]/text()')
weather = html.xpath('//div[@class="tian_three"]/ul/li/div[4]/text()')
wind_direction = html.xpath('//div[@class="tian_three"]/ul/li/div[5]/text()')

data = {
"时间": time1,
"最高温度": higtest_tmp,
"最低温度": lowest_tmp,
"天气": weather,
"风向": wind_direction
}
df = DataFrame(data)

之后再拼接df即可:

df = DataFrame(no_data)

date_list = get_date()
for i in tqdm(range(len(date_list))):
date_url = start_url + date_list[i]+'.html'
work_df = work(date_url,headers)
df = pd.concat([df,work_df])
df.reset_index(drop=True,inplace=True)
df['日期'], df['周期'] = df['时间'].str.split(' ', 1).str
df.drop('时间',axis=1,inplace=True)
df.to_csv("data.csv",encoding='utf8',index=False)
print(df)

二、下载现有数据集

从中国气象数据网上直接下载现有数据集。但是,这里的每一个数据集的可下载身份是有限制的,所以我并不能直接下载这个数据集。

爬取天气数据--同班同学的毕设数据需要_html_06


转向了万能的百度,经过搜索之后,找到一个有这个数据集的一个网址,具体忘记了,直接下载之后保存到本地。

大概有这几个文件和文件夹:

爬取天气数据--同班同学的毕设数据需要_数据集_07


爬取天气数据--同班同学的毕设数据需要_数据集_08


爬取天气数据--同班同学的毕设数据需要_数据_09

在查看文档之后,有必要完成数据的简单预处理,不然后期观看数据会很费力;
预处理过程如下(列举一个,其它类推,其实就是增加一个字段名称上去,检查一个数据完整性):

columns = ["区站号","纬度","经度","观测场海拔高度","年","月","日","小型蒸发量","大型蒸发量","小型蒸发量质量控制码",
"大型蒸发量质量控制码"]
df_evp = pd.read_csv("EVP蒸发/SURF_CLI_CHN_MUL_DAY-EVP-13240-201001.TXT",header=None,sep="\s+",names=columns)


df_evp.head()

爬取天气数据--同班同学的毕设数据需要_html_10

df_evp.isnull().any()

爬取天气数据--同班同学的毕设数据需要_数据集_11

df_evp = transform_df(df_station,df_evp)
df_evp.to_csv("预处理结果/EVP蒸发.csv",index=False,encoding='utf-8')

后续考虑将每个文件拼接在一起,但是暂时先不用,看需求拼接就好了。

欢迎加入QQ群一起学习和交流,只为学习和交流:275259334