python实现通过微信每天给女友发天气预报(超简单代码+itchat+入门级爬虫)

1.前言

        刚学爬虫想写个最简单的小程序体会一下爬虫的效果,原理代码非常简单,仅供大家学习~

2.前期准备

    (1).itchat

            itchat是一个非常方便简单的python的微信接口,可以傻瓜一样的登陆微信,发送消息发送图片等,这里我只用到了最简单的登陆登出和send方法。


        auto_login可以让用户执行登陆,执行后效果就是展示一个二维码让你去扫,我发现每次运行一遍都要扫一遍很麻烦,查资料发现写一个hotReload=True即可无需再次扫码很方便。

auto_login(hotReload=True)

登陆成功会有如下显示

python实现通过微信每天给女友发天气预报(超简单代码+itchat+入门级爬虫)_第1张图片


            登出操作很简单,不多说了,习惯性的加上   

logout()
            重点来了send函数的使用
send(msg=message,toUserName = userName)
msg为想发送的信息,userName为用户的一个编号,注意这个不是所谓的微信号或者昵称,开始用微信号当userName发现不对,解决方法如下
users = ic.search_friends(name = 'yl')

userName = users[0]['UserName']

先search一下,这时候的name就写你给他的备注就好,然后再读一下他的UserName就好了,有兴趣的可以print一下,是一大长串十六进制数

         要注意的是,send函数返回一个值,如果send成功即返回True,失败即返回False。可以用它来检测一下是否发送成功。

python实现通过微信每天给女友发天气预报(超简单代码+itchat+入门级爬虫)_第2张图片


千万不要尝试把send放进for循环!!我想呼死我室友的时候,发了一百多条就被微信封了几个小时不能发消息!!!血的教训。。。

(2).爬虫

        只学了一天爬虫,所以还不是很懂,以后会写几篇详细的关于爬虫的东西,今天只说说最简单的应用

   http://tianqi.sogou.com/changchun/想爬这个网站的天气,右键查看原码python实现通过微信每天给女友发天气预报(超简单代码+itchat+入门级爬虫)_第3张图片发现写的很简单啊。。。所以就成功爬了它。说一下方法:

(1).先安装 urllib和BeautifulSoup

(2).urlopen

html=urllib.request.urlopen("http://tianqi.sogou.com/changchun/")

用这个函数来打开网页↑,把它当做对象,这样就可以对他进行一系列操作了

(3).提取信息

我发现有关天气温度和日期的信息都属于p标签,并且class都是p1,那就很方便了,调用这个函数

    bs0bj = BeautifulSoup(html)
    nameList = bs0bj.findAll("p",{"class":"p1"})

以字典形式写的。这样把class为P1,并且都是P类标签的全部放进了nameList数组里,打印一下他吧,打印成功就证明已经爬成功啦


爬虫这一块今天看了几个入门函数,就想小试牛刀一下,爬起来很顺利,更详细的会再写几篇blog学习

(3).附上源代码

        两个文件,第一个写爬虫,第二个写微信发送消息

        主函数:

from urllib.request import urlopen
from bs4 import BeautifulSoup


def getMessage():
    html=urlopen("http://tianqi.sogou.com/changchun/")
    bs0bj = BeautifulSoup(html)
    nameList = bs0bj.findAll("p",{"class":"p1"})
    count = 0
    weather=[]
    for name in nameList:
        count+=1
        weather.append(name.get_text())
        if(count==3):
            break
    return weather
if __name__ == "__main__":
    weather = getMessage()
    print(weather)


import itchat as ic
import time
from Getmessage import getMessage
from getTime import startPro


count = 0
try:

    weatherInformation=getMessage()
    Date = weatherInformation[0]
    weather = weatherInformation[1]
    temper = weatherInformation[2]
    message=Date+"\n"+weather+"\n"+temper+"\n"
    print(message)
except:#抛出异常
    message = ""
    print("Get message failed")
ic.auto_login(hotReload=True)
users = ic.search_friends(name = 'yl')

userName = users[0]['UserName']
ret = ic.send(msg=message,toUserName = userName)

if ret:
    print("Succeed Sending")
else:
    print("Error sending")

time.sleep(60)
ic.logout()

(4).定时

        定时发送,不需要多说了,入门级别的语句,直接贴代码吧,又写在另一个文件了

import time
def startPro():
    while(1):
        currentHour = int(time.strftime("%H"))
        print(currentHour)
        if currentHour==7:
            print("It's time")
            break
        if currentHour == 6:
            print("itstimerightnow")
            time.sleep(60)
        else:
            print("It's not time ,sleep........")
            time.sleep(3500)
if __name__ == "__main__":
     startPro()

(5).结语

    这个程序可以改动的东西太多了,代码也不是很精炼完善,而且可以爬一下建议的着装,是否带伞,是否适宜出行这一类信息,然后我会把它放进树莓派中,每天就可以进行推送啦(PC也可以的)……过一阵更新一下

        祝大家早日脱单




你可能感兴趣的:(python)