专栏首页应兆康的专栏使用Python进行天气预测之获取数据
原创

使用Python进行天气预测之获取数据

0. 前言

Python实战之天气预测

1. 爬取数据

这里使用request库和正则表达式进行数据的爬取

爬取网上的历史天气数据,这里我使用了成都的历史天气数据(2011-2018年)

之后的天气预测也将会使用成都的历史天气数据

目标网址: http://tianqi.2345.com

这里说明:

由于数据存在缺失,2016年以前的空气质量数据没有找到

通过分析网址我们得到最后的数据都是存在于js文件中的。

1.1 构造日期:

for year in range(2011, 2019):
    for month in range(1, 13):
        if month == 12 and year > 2016:
            month = "%.2d".format() % month
            url = "http://tianqi.2345.com/t/wea_history/js/" + str(year) + str(month) + "/56294_" + str(year) + str(
                month) + ".js"
        else:
            url = "http://tianqi.2345.com/t/wea_history/js/56294_" + str(year) + str(month) + ".js"
        print(url)
        getData(url)

通过分析链接可以,在2016年以前,每个12月的链接和一般的链接是不一样的。

所以我们加上了判断语句,当然细心的小伙伴应该可以看到我们这里还会构造出2019年的链接,这个错误链接我们在后面获取数据的时候会进行处理,若链接是没用的,我们选择不处理,直接pass。

1.2 获取网页源码

response = requests.get(url)
if response.status_code == 200:
    html = response.text
    return html
else:
    return None

1.3 使用正则表达式提取数据

results = re.findall("(\{ymd.*?\})", html)
for result in results:
    # 日期
    date = re.search("(\d{4}-\d{1,2}-\d{1,2})", result).group().strip()
    # 最高气温
    bWendu = re.search("bWendu:'(.*?)',yWendu", result).groups()[0].strip()
    # 最低气温
    yWendu = re.search("yWendu:'(.*?)',tianqi", result).groups()[0].strip()
    # 天气情况
    tianqi = re.search("tianqi:'(.*?)',fengxiang", result).groups()[0].strip()
    # 风向
    fengxiang = re.search("fengxiang:'(.*?)',fengli", result).groups()[0].strip()
    # 风力
    fengli = re.search("fengli:'(.*?)'", result).groups()[0].strip()
    try:
        # 空气指数
        aqi = re.search("aqi:'(.*?)',aqiInfo", result).groups()[0].strip()
    except:
        aqi = 'NULL'
    try:
        # 空气指数信息
        aqiInfo = re.search("aqiInfo:'(.*?)',aqiLevel", result).groups()[0].strip()
    except:
        aqiInfo = 'NULL'
    try:
        # 空气等级
        aqiLevel = re.search("aqiLevel:'(\d{1,2})'}", result).groups()[0].strip()
    except:
        aqiLevel = 'NULL'

使用正则表达式匹配出上面那些信息,由于空气指数系列数据2016年前不存在,所以我们设置它为NULL。

1.4 组合数据写入文件

s = date + " " + bWendu + " " + yWendu + " " + tianqi + " " + fengxiang + " " + fengli + " " + aqi + " " + aqiInfo + " " + aqiLevel + "\n"
with open('cd_weather.txt', 'a', encoding='utf-8') as f:
    f.write(s)

得到成都历史天气数据(2011-2018年)(点击可下载)

1.5 分析数据

这里暂时简单分析数据,之后会有文章进行详细分析

2011-2018年成都气温

可见数据变化趋势是非常明显的。

本文代码下载地址:https://yingjoy.cn/downloads/weather/getData.py

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

    haifeiWu
  • SQL中GROUP BY用法示例

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

    Awesome_Tang
  • 【系统设置】CentOS 修改机器名

    ken.io
  • 不只是软件,在线也可以免费下载百度文库了。

    不管是学生,还是职场员工,下载各种文档几乎是不可避免的,各种XXX.docx,XXX.pptx更是家常便饭,人们最常用的就是百度文库,豆丁文库,道客巴巴这些下载...

    课代表
  • 【倒计时7天】2018教育部-腾讯公司产学合作协同育人项目申请即将截止!

    腾讯高校合作
  • 考研英语-1-导学

    英二图表作文要重视。总体而言,英语一会比英语二难点。不过就写作而言,英语二会比英语一有难度,毕竟图表作文并不好写。

    用户1335799
  • 中国互联网协会发布:《2018中国互联网发展报告》

    在2018中国互联网大会闭幕论坛上,中国互联网协会正式发布《中国互联网发展报告2018》(以下简称《报告》)。《中国互联网发展报告》是由中国互联网协会与中国互联...

    钱塘数据
  • ISUX Xcube智能一键生成H5

    腾讯ISUX
  • 理工男图解零维到十维空间,烧脑已过度,受不了啦!

    让我们从一个点开始,和我们几何意义上的点一样,它没有大小、没有维度。它只是被想象出来的、作为标志一个位置的点。它什么也没有,空间、时间通通不存在,这就是零维度。

    钱塘数据
  • 知识体系解决迷茫的你

    最近在星球里群里都有小伙伴说道自己对未来的路比较迷茫,一旦闲下来就不知道自己改干啥,今天我这篇文章就是让你觉得一天给你 25 个小时你都不够用,觉得睡觉都是浪费...

    桃翁

扫码关注云+社区

领取腾讯云代金券