Python 爬取历史天气数据

作者:梅昊铭

1. 导读

之前Mo给大家分享过杭州历年天气情况的数据集,相信有不少小伙伴好奇这些数据是怎么获取。今天Mo就来教大家如何使用Python来进行历史天气数据的爬取。本文的内容只要求大家熟悉 Python 即可,欢迎大家跟着小Mo一起学习。

2. 准备工作

2.1 目标网站分析

在爬取数据之前,我们首先要对爬取的目标网站进行分析,弄清楚爬取的页面和数据在哪里,然后再利用 Python 工具进行数据爬取。

首先,设定爬取数据的目标网站为2345天气预报网,然后进入历史天气数据页面并设定目标城市为杭州。

然后分析该网页,我们发现改变相应的年月网页的 URL 并没有发生改变,这说明网页上的数据是动态加载的。我们打开 Chrome 浏览器的DevTools,再改变年月,发现该页面动态加载了一个 js 文件。

仔细分析后,我们发现每改变一次年月,该页面就动态加载一个 js 文件。点开对应的 js 链接,我们就可以发现每个月份的历史数据是通过请求一个 js 数据文件获取的。

接着我们使用 Python 对每一个 js 文件进行分析,就可以获取相应月份的历史天气数据了。

2.2 Python 库

利用 Python 进行数据爬取时,我们常用的一些库有requests, Beautifulsoup, scrapy等。本文中,我们使用 requests 工具来获取历史天气数据的 js 数据文件,并用 demjson 工具包对返回的非标准 json 数据格式进行解析。最后,使用 csv 包将获取的历史数据存到csv文件中。

本教程中使用的Python 第三方库:requests, demjson。

3. 数据爬取

3.1 构造URL列表

通过前面的分析,我们已经了解到每个月份的历史天气数据是通过一个 Javascript 文件获取的。因此,我们需要构造带爬取数据的 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. 参考资料

关于我们

Mo(网址:https://momodel.cn) 是一个支持 Python的人工智能在线建模平台,能帮助你快速开发、训练并部署模型。

近期 Mo 也在持续进行机器学习相关的入门课程和论文分享活动,欢迎大家关注我们的公众号获取最新资讯!

python爬取历史天气_Python 爬取历史天气数据相关推荐

  1. python 柱状图上显示字体_Python爬取百部电影数据,我发现了这个惊人真相!

    2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%:国产电影总票房411.75亿元,同比增长8.65%,市场占比 ...

  2. python爬取豆瓣书籍_Python 爬取豆瓣读书标签下的书籍

    这几天想爬下豆瓣读书时发现 github 上他人分享的源码都有一定年份了,豆瓣读书的页面貌似也稍微改了,于是就在前人轮子的基础上改进一下重新爬下豆瓣读书.Python 版本是 3.7. 1.爬取信息 ...

  3. python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?

    开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...

  4. python爬取学校新闻_Python抓取学院新闻报告

    们发现,我们能够直接在新闻详情页面抓取到我们需要的数据:标题,时间,内容.URL. 好,到现在我们清楚抓取一篇新闻的思路了.但是,如何抓取所有的新闻内容呢? 这显然难不到我们. 我们在新闻栏目的最下方 ...

  5. python开源代码百度盘_python爬取百度云网盘资源-源码

    今天测试用了一下python爬取百度云网盘资源. 代码片段import urllib import urllib.request import webbrowser import re def yun ...

  6. python爬取动态网页_python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  7. python爬关键词百度指数_Python 抓取指定关键词的百度指数

    百度指数很多时候在我们做项目的时候会很有帮助,从搜索引擎的流量端给到我们一些帮助,比如:家具行业的销量跟"装修","新房","二手房"等关键 ...

  8. python 实现简单查询页面_python web 实现简易天气查询

    本文记录使用 Flask 快速完成一个 简易天气查询 MVP 程序的探索,学习过程.程序采用Flask+Jinja2实现,其中Flask扩展包括:1.flask-bootstrap,2.Flask-W ...

  9. python爬取天气预报源代码_python抓取天气并分析 实例源码

    [实例简介] Python代码抓取获取天气预报信息源码讲解.这是一个用Python编写抓取天气预报的代码示例,用python写天气查询软件程序很简单.这段代码可以获取当地的天气和.任意城市的天气预报, ...

最新文章

  1. linux下如何修改系统时间
  2. Android ----制作自己的Vendor
  3. hdu 4417 Super Mario 树状数组||主席树
  4. CSS实现段落首行缩进、1.5倍行距、左右对齐
  5. 计算机课禁用监视器,如何设置关闭监视器硬盘系统待机项为从来不
  6. js 两个map合并为一个map_ArcGIS API for JS3.x教程二:构建第一个简单的程序
  7. gem install sass 本地配置和淘宝源无效的解决办法
  8. Android 10如何增强移动安全性
  9. C++的函数指针的使用(仍存在问题)
  10. CSS3特殊图形制作
  11. echarts2获取series下的data数值
  12. C# HttpServer 框架
  13. Python:暴力破解密码
  14. flutter项目引入iconfont【阿里巴巴图标】的图标
  15. anacondaJupyter相关环境配置及常见问题及pycharm快捷命令(很全!很详细)
  16. Java高并发程序设计(三)——JDK并发包(一)
  17. MongoDB Tailable Cursors
  18. 网友8年观察楼市得出11大房价经验 高手在民间
  19. java找出命题p和q的合取_从键盘输入两个命题变元p和q的真值-求它们的合取、析取、蕴含和等价的真值...
  20. 寺库TRYTRY CMO欧泽超:技术向善,科学变美

热门文章

  1. android5.1分屏,新增分屏荣耀X2发布Android 5.1版本OTA升级
  2. Excel数据分析 day2
  3. ClickHouse删除表
  4. 可升级鸿蒙系统的手机,哪些华为手机可以升级鸿蒙系统
  5. go 操作MySQL之mysql包
  6. Golang学习 Day_09
  7. 基于 Vue 的学生社团线上管理平台开发与设计
  8. 微信小程序--札记与贺卡前端UI及页面实现
  9. Echarts柱状图和折线图动态轮播展示
  10. 什么是数?什么是量?