python爬取历史天气_Python 爬取历史天气数据
Python 爬取历史天气数据
作者:梅昊铭
1. 导读
之前 Mo 曾向大家介绍杭州多年间气象数据集合, 诸多读者可能对获取这些数据的方法充满兴趣. 今天 Mo 就为大家演示如何利用 Python 进行历史天气数据采集. 文章要求读者具备基本的 Python 知识即可开始学习, 欢迎各位读者跟随小莫一起深入探索数据分析的世界!
2. 准备工作
2.1 目标网站分析
在执行数据爬取操作之前,首先需要对目标网站进行全面分析,明确目标页面及所需的数据存储位置,之后使用Python编程工具实现自动化抓取过程
首先,在获取所需数据的网站中选择2345天气预报网作为目标。接着访问历史天气数据分析页面,并将要收集的数据限定在杭州市。
接着对该网页进行分析后发现,在更改相关年份的网页 URL 时,并未发生任何变化。这表明该网站的数据呈现动态加载特性。通过浏览器开发者工具(Chrome DevTools)访问该页面后再次更改年份时,则会注意到在重新设置时间后,页面会自动加载相关的 JavaScript 文件。

仔细观察后揭示了每当调整月份时该页面主动地加载一个JS文件;点开对应的JS链接后就能够通过访问一个JS数据文件来获取每个月份的历史数据。

随后我们应用 Python 对每个 JS 文件进行解析研究,并能获得相应月份的历史天气数据。
2.2 Python 库
当我们编写Python程序进行数据抓取时,在本研究工作中,默认情况下我们会使用的常见工具包括requests、BeautifulSoup和Scrapy等技术。具体来说,在本研究工作中,默认情况下我们会通过requests工具获取目标网站的历史天气数据分析结果,并采用demjson工具解析返回的非标准JSON格式;最后阶段,在完成历史天气数据分析后,则会将整理好的JSON信息保存为CSV格式的数据文件供后续处理使用。
本教程中使用的Python 第三方库:requests, demjson。
3. 数据爬取
3.1 构造URL列表
在之前的分析中,在之前的研究和讨论中,在先前的内容部分中,在之前的章节里,在上一部分的内容里(如果有的话),在上一段落里(如果有的话),在上一部分讨论的内容里(如果有的话),或者其他类似的上下文中
构造2019全年的月份列表
months = []
for year in (2019,):
for month in range(12):
months.append("%d%02d"%(year, month+1))
todo_urls = [
"http://tianqi.2345.com/t/wea_history/js/"+month+"/58457_"+month+".js"
for month in months
]
3.2 批量下载数据
使用 requests 库获取 js 文件中的数据,并存到 datas 变量中。
import requests
datas = []
for url in todo_urls:
r = requests.get(url, headers = headers)
if r.status_code!=200:
raise Exception()
去除javascript前后的字符串,得到一个js格式的JSON
data = r.text.lstrip("var weather_str=").rstrip(";")
datas.append(data)
3.3 解析数据
我们从 js 文件读取的数据以 json 格式保存,并被 demjson 用来进行解析。
解析所有月份的数据
all_datas = []
for data in datas:
tqInfos = demjson.decode(data)["tqInfo"]
all_datas.extend([x for x in tqInfos if len(x)>0])
3.4 将结果导入 csv 文件
import csv
with open('./hangzhou_tianqi_2019.csv', 'w', newline='', encoding='utf-8') as csv_file:
writer = csv.writer(csv_file)
columns = list(all_datas[0].keys())
writer.writerow(columns)
for data in all_datas:
writer.writerow([data[column] for column in columns])
3.5 结果展示

4. 参考资料
关于我们
该平台是一个主要面向Python编程语言的人工智能在线建模工具。该平台的主要功能包括提供高效的工具和资源用于创建、训练和部署各种类型的AI模型。
Mo 正在频繁地参与机器学习领域的入门课程及论文分享活动,请订阅我们的官方账号以及时了解最新的动态。


