python爬虫实现自动发天气预报

两年前写的自动发天气预报的脚本,今天测试了一下发现依然还能运行。利用了itchat包,实际上调用的就是网页版微信的接口,有一个缺点就是时间长了不活跃会掉线,可以在win7的计划任务里设置每隔一分钟给自己发送一条空消息。

# -*- coding: utf-8 -*-
"""
Created on Wed Aug 30 14:55:57 2017

@author: moses1213
"""

from pyquery import PyQuery as pq
import itchat
import datetime


def nickname_to_id(nickname,tag):
    #tag = 0 表示单个用户, tag = 1 表示群聊
    if tag == 0:
        pyitem = itchat.search_friends(name = nickname)
    elif tag == 1:
        pyitem = itchat.search_chatrooms(name = nickname)
    else:
        print("请输入正确参数!\n")
        return None
    return pyitem[0].UserName

//create a dict for friends' city
receiver = {}
//create a dict for cities' chinese name
city_d = {'chengdu':'成都', 'beijing':'北京', 'shanghai':'上海', 'guangzhou':'广州'}

itchat.auto_login(hotReload=True)
#itchat.auto_login(hotReload=true)
itchat.dump_login_status()


def get_weather(city):
    web_head = 'http://weather.sina.com.cn/'
    URL = web_head + city
    weather_html = pq(URL,encoding="utf-8")
    temp_range = weather_html('.wt_fc_c0_i_temp')('p').eq(0).text()
    temp_ls = temp_range.split('/')
    temp_max = temp_ls[0].lstrip().rstrip()
    temp_min = temp_ls[1].lstrip().rstrip()
    curr_temp = weather_html('.slider_degree').text()
    weather_bar = weather_html('.slider_detail')('p').text()
    weather_ls = weather_bar.split('|')
    pollution_index = weather_html('.slider_warn_i_tt')('p').text()
    air_quality = weather_html('.slider_warn_val3')('p').text()
    curr_date = weather_html('.slider_ct_date')('p').text()
    update_date = weather_html('.slider_ct_time').text()

    conition = weather_ls[0].lstrip().rstrip()
    wind = weather_ls[1].lstrip().rstrip()
    humidity = weather_ls[2].lstrip().rstrip()

    weather = city_d[city] + '  ' + curr_date + '\n' + '今天' + conition + ', ' + wind + '\n' + temp_min + '~' + temp_max + ', 当前温度'+ curr_temp + '\n相对' + humidity + '\n污染指数:   ' + pollution_index + '\n空气质量:   ' + air_quality + '\n(数据更新时间' + update_date + ')'
    return weather

def time_diff(send_time):
    send_time_list = send_time.split(':')
    hh = int(send_time_list[0])
    mm = int(send_time_list[1])
    curr_time = datetime.datetime.now()
    if hh < curr_time.hour:
        return (curr_time.hour-hh)*60+curr_time.minute-mm
    elif hh > curr_time.hour:
        return (hh-curr_time.hour)*60+mm-curr_time.minute
    else:
        return abs(mm-curr_time.minute)

def send_weather(nickname,tag, send_time):
    if time_diff(send_time) < 1:
        user_id = nickname_to_id(nickname,tag)
        for city in receiver[nickname]:
            itchat.send(msg=get_weather(city), toUserName=user_id)

def send_text(nickname,tag):
    user_id = nickname_to_id(nickname,tag)
    itchat.send(msg='test',toUserName=user_id)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值