美文网首页
给自己和每个单身狗的福利

给自己和每个单身狗的福利

作者: 比特舞者 | 来源:发表于2017-11-23 23:24 被阅读24次

为什么

上个星期忘了拿伞,结果下班的时候只能打车回家,白白多花了钱,我从手机中自带的闹钟里面找了一下,居然没有一个能根据天气来进行提醒的,一狠心,一跺脚,自己来写一个吧

原材料

开干

废话少说,先来点代码,代码地址,说起来,挺简单的,就好像把大象放冰箱里面一样步骤。

  • 从天气预报的网站上把近七天的网页下载下来
  • 使用正则表达式从下载下来的网页中抽出天气的数据
  • 把天气数据通过 qq 邮箱发送给自己
  • 使用 window是定时任务程序,定时调用 Python 的脚本

哦,NO,比把大象放冰箱里面多出了一部,不过不要在意这些细节。ok,下面来项目说一下各个步骤吧。

获取天气数据

且看get_weather方法,我在这个方法里面,抽取了天气的数据,并且返回了一个 tuple 类型,核心代码如下:

    user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36'
    headers = {'User-Agent': user_agent, 'timeout': 60}
    request = urllib2.Request(url, headers=headers)
    try:
        response = urllib2.urlopen(request)
    except (IOError, httplib.HTTPException, httplib.BadStatusLine) as e:
        print url + '列表页面发生异常', e
        time.sleep(60)
        return get_weather(url)
    else:

其中,需要注意一下几点

  • header 头信息中,timeout 的设置。访问网页的反应时间,当超过这个时间后,程序会报出异常。
  • httplib.BadStatusLine 的这个异常处理需要注意一下,当网站没有反应的时候程序就会抛出这个异常。这个非常有用,如果不捕捉这个异常,程序当遇到 httplib.BadStatusLine 异常时,会停止。我对这个异常做了捕捉,所以我在后面让程序暂停了 1 分钟,然后再递归的调用 get_weather,直到调用成功为止。
  • 另外,在case_weather这个函数中,对天气的数据稍微做了一些处理,读者可自行阅读。

发送天气数据到 QQ 邮箱

  • 使用 QQ 邮箱的前提条件是在 QQ 邮箱开启 IMAP/SMTP服务,为了方便起见,我是全部开始了。


    开始 IMAP/SMTP 服务
  • 开启后,使用 Python 自带的 smtp 组件把天气的信息发送到我自己的邮箱。

设置定时任务

这里使用的 win7 系统自带的定时任务程序,参照文章,需要注意的是,在开启任务的时候,要设关闭上次执行的进程,这样设置是为了不被一次任务出现异常而阻塞整个定时任务。

另外需要注意的是不用使用基本任务,要使用“任务”,否则存在任务执行不成功的隐患。

相关文章

网友评论

      本文标题:给自己和每个单身狗的福利

      本文链接:https://www.haomeiwen.com/subject/gigtbxtx.html