Python爬取历史天气数据作者:梅皓明1、介绍之前,墨老师给大家分享了历年杭州天气情况的数据集。相信很多朋友都很好奇这些数据是怎么得到的。今天小墨就教大家如何使用Python爬取历史天气数据。这篇文章的内容只需要你熟悉Python。欢迎大家和小墨一起学习,项目地址:https://momodel.cn/workspace/5ea1cd698446abd9da8b73f1?type=app2。准备工作2.1目标网站分析在抓取数据之前,首先要对抓取到的目标网站进行分析,弄清楚抓取的页面和数据在哪里,然后使用Python工具进行数据抓取。首先将爬取数据的目标网站设置为2345天气预报网,然后进入历史天气数据页面,将目标城市设置为杭州。然后分析网页,发现更改对应年月网页的url并没有改变,这说明网页上的数据是动态加载的。我们打开Chrome浏览器的DevTools,然后更改年月,发现页面动态加载了一个js文件。仔细分析后发现,每次更改年月,页面都会动态加载一个js文件。点击对应的js链接,可以发现每个月的历史数据都是通过请求一个js数据文件获取的。然后我们用Python来分析每个js文件,就可以得到对应月份的历史天气数据。2.2Python库使用Python进行数据爬取时,我们经常使用的一些库包括Requests、BeautifulSoup、Scrapy等,本文中我们使用requests工具获取历史天气数据的js数据文件,并使用demjson解析返回的非标准json数据格式的工具包。最后使用csv包将获取的历史数据保存成csv文件。本教程使用的Python第三方库:requests、demjson。3.数据爬取3.1构建URL列表通过前面的分析,我们了解到每个月的历史天气数据是通过Javascript文件获取的。因此,我们需要将爬取的数据构建一个URL列表,然后对数据进行批量爬取。#构造2019年全年的月份列表months=[]foryearin(2019,):formonthinrange(12):months.append("%d%02d"%(year,month+1))todo_urls=["http://tianqi.2345.com/t/wea_history/js/"+month+"/58457_"+month+".js"formonthinmonths]3.2批量下载数据使用requests库获取数据在js文件中并保存到datas变量中。importrequestsdatas=[]forurlintodo_urls:r=requests.get(url,headers=headers)ifr.status_code!=200:raiseException()#去掉javascript前后的字符串得到一个js格式的JSON数据=r.text.lstrip("varweather_str=").rstrip(";")datas.append(data)3.3分析数据我们从js文件中获取的数据是以json格式存储的,需要使用demjson来解析数据。#解析所有月份的数据all_datas=[]fordataindatas:tqInfos=demjson.decode(data)["tqInfo"]all_datas.extend([xforxintqInfosiflen(x)>0])3.4will结果Importcsvfileimportcsvwithopen('./hangzhou_tianqi_2019.csv','w',newline='',encoding='utf-8')ascsv_file:writer=csv.writer(csv_file)columns=list(all_datas[0].keys())writer.writerow(columns)fordatainall_datas:writer.writerow([data[column]forcolumnincolumns])3.5结果展示4.参考Github项目:https://github.com/peiss/ant-learn-python教程视频:https://www.bilibili.com/video/BV1pJ411A7N2?from=search&seid=14913508329256294969爬虫教程:https://morvanzhou.github.io/tutorials/data-manipulation/scraping/关于我们Mo(网址:https://momodel.cn)是一个支持Python的在线人工智能建模平台,可以帮助您快速开发、训练和部署模型。近期,莫老师也在持续分享机器学习相关的入门课程和论文。欢迎关注我们的公众号获取最新资讯!
