数据来源:黄山风景区管理委员会官网 > 气象信息
目录
- 1.request请求
- 2.lxml结合xpath解析网页源代码
- 3正则提取文本
- 将数据去重、将日期转为datetime对象等
- 2.读入数据
云海是黄山的第一奇观。
据百度百科记载,黄山一年只有51天可以看到云海,每年11月到第二年的5月是观赏环山云海的最佳时间段。抱着数据党的态度,想用真实的数据证明以上结论是否可信。
流程:
1.数据获取:黄山官网的气象预告从2018年起至今提供了条天气预报数据,包括我们所需的基本天气情况以及云海概率。
导航:黄山风景区管理委员会官网-气象信息
2.对获得文本数据进行提取,这里我们采用的Python中正则的方法来提取。
3.进行数据透视和绘图分析。
一、数据获取
1.request请求
根据网页结构构造url请求,一共75页。
代码语言:javascript复制url = 'https://hsgwh.huangshan.gov.cn/content/column/6794224?pageIndex={}'.format(i)
2.lxml结合xpath解析网页源代码
代码语言:javascript复制#定义字典储存数据
item = {}
#解析源代码
content_lst = selector.xpath("//div/div[3]/div[3]//ul//a//span/text()")
#解析日期
date_lst = selector.xpath('//li//span[@class="right date"]/text()')
3正则提取文本
首先要解决正则如何匹配中文字的问题:
1.”[u4e00-u9fa5] ”可以表示一个或者多个中文字符;
2.利用编码函数将特定字符转换为unicode编码。
代码语言:javascript复制def get_unicode(str):
str_unicode = str.encode('unicode-escape').decode()
return print(str_unicode)
M_unicode = get_unicode('月')
D_unicode = get_unicode('日')
#以下是输出,填入匹配规则就行
#u6708
#u65e5
代码语言:javascript复制# 循环解析
for num,n in enumerate(content_lst):
pattern_num = re.compile(r'-?d{1,2}') # 匹配1-2位数字 -?此符号最多可以有一次
pattern_per = re.compile(r'-?d{1,2}%') # 匹配1-3位概率
pattern_tex = re.compile(r'[u4e00-u9fa5]') # 匹配所有汉字
pattern_TEM = re.compile(r'u6c14u6e29-?d{1,2}[u4e00-u9fa5]-?d{1,2}')
pattern_SR = re.compile(r'd{1}u65f6d{1,3}u5206') # 日出时间文本
# 最低和最高温度
tems = pattern_TEM.findall(n)
for tem in tems:
tem_min = pattern_num.findall(tem)[0]
tem_max = pattern_num.findall(tem)[1]
item['tem_min'] = tem_min
item['tem_max'] = tem_max
代码语言:javascript复制#云海概率2018有和2022用的不同表述,需要多个条件和手动判断
if len(percent) == 2:
sunrise_time_per = percent[0]
item['sunrise_time_per'] = sunrise_time_per
# 云海可见概率
sea_of_clouds_per = percent[1]
item['sea_of_clouds_per'] = sea_of_clouds_per
elif len(percent) == 1:
sunrise_time_per = percent[0]
item['sunrise_time_per'] = sunrise_time_per
if len(per_kejianyunhai) == 1 :
item['sea_of_clouds_per'] = '80%'
elif len(per_oujianyunhai) == 1:
item['sea_of_clouds_per'] = '30%'
else:
print(n url '网页需核实1')
else:
print(n url '网页需核实0')
item['sunrise_time_per'] = item['sea_of_clouds_per'] = '0'
代码语言:javascript复制# 储存 pd.DataFrame([item]).to_csv('./weather.csv',mode='a',index=False,header=0)
二、数据清洗
将数据去重、将日期转为datetime对象等
代码语言:javascript复制df.drop_duplicates(inplace=True,ignore_index=True)
read_csv(parse_dates=['datetime']) # parse_dates将某些列解析为 DataTime 对象,这比使用 to_datetime() 方便
2.读入数据
代码如下(示例):
代码语言:javascript复制data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
三、数据分析
究竟哪些天容易见到云海:
每年最可能见到黄山云海的76天
三年平均下来,共有76天云海可见概率大于等于60%,占全年20%,所以碰上黄山云海还是需要靠运气的。我们可以看到五一和十一黄金周云海概率不到60%,同时人流又多还会堵在上下山途中动不了,建议错峰出游。
他们集中在每年11-12月、1-2月、6月,其中冬季能见到雾凇与云海两大奇观,黄山的淡季门票还打折,时间是2021年12月20日至2022年1月20日,查好天气错峰看雪景也是很不错的。
image-20221125182759721
最后
感谢阅读,如果觉得文章有用,希望点赞和关注。