刚学爬虫想写个最简单的小程序体会一下爬虫的效果,原理代码非常简单,仅供大家学习~
(1).itchat
itchat是一个非常方便简单的python的微信接口,可以傻瓜一样的登陆微信,发送消息发送图片等,这里我只用到了最简单的登陆登出和send方法。
auto_login可以让用户执行登陆,执行后效果就是展示一个二维码让你去扫,我发现每次运行一遍都要扫一遍很麻烦,查资料发现写一个hotReload=True即可无需再次扫码很方便。
auto_login(hotReload=True)
登陆成功会有如下显示
登出操作很简单,不多说了,习惯性的加上
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。可以用它来检测一下是否发送成功。
千万不要尝试把send放进for循环!!我想呼死我室友的时候,发了一百多条就被微信封了几个小时不能发消息!!!血的教训。。。
(2).爬虫
只学了一天爬虫,所以还不是很懂,以后会写几篇详细的关于爬虫的东西,今天只说说最简单的应用
http://tianqi.sogou.com/changchun/想爬这个网站的天气,右键查看原码发现写的很简单啊。。。所以就成功爬了它。说一下方法:
(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也可以的)……过一阵更新一下
祝大家早日脱单