最近想着做一个微信机器人,主要想要实现能够每天定时推送天气预报或励志语录,励志语录要每天有自动更新,定时或当有好友回复时,能够随机推送不同的内容。于是开始了分析思路。博主是采用了多线程群发,因为微信对频繁发送消息过快还会出现发送失败的问题,因此还要加入time.sleep(1),当然时间根据自身情况自己定咯。本想把接入写诗机器人,想想自己的渣电脑于是便放弃了,感兴趣的可以尝试一下。做完会有不少收获希望对你有帮助。

  (1)我们要找个每天定时更新天气预报的网站,和一个更新励志语录的网站。当然如果你想更新其他内容,相信高智商的你这些都是小意思啦。博主是随便找了2个网站进行抓取。

  第一步:抓取某网站天气预报信息,为我所用,因温度气候和生活指数在两个页面,于是将2个页面的数据抓取并进行整合:

  这里抓取第一个页面内容,为温度,风向,日期,随便把第二天天气的也一并抓取了:

  1. def get_content(self, html_str):
  2. html = etree.HTML(html_str)
  3. weather_ts = html.xpath("//div[@id='7d']/ul")
  4. today_w = ''
  5. tomorrow_w = ''
  6. for weather_t in weather_ts:
  7. today_w += weather_t.xpath("./li[1]/h1/text()")[0] + ' '
  8. today_w += weather_t.xpath("./li[1]/p[1]/text()")[0] + ' '
  9. today_w += weather_t.xpath("./li[1]/p[2]/i/text()")[0] + ' '
  10. today_w += '风向' + weather_t.xpath("./li[1]/p[3]/i/text()")[0]
  11. tomorrow_w += weather_t.xpath("./li[2]/h1/text()")[0] + ' '
  12. tomorrow_w += weather_t.xpath("./li[2]/p[1]/text()")[0] + ' '
  13. tomorrow_w += '风向' + weather_t.xpath("./li[2]/p[3]/i/text()")[0]
  14. all_w = today_w + '--' + tomorrow_w
         return all_w

  这里抓取第二页面内容,包括穿衣指数,紫外线指数:

  1. def get_content1(self, html_str):
  2. html = etree.HTML(html_str)
  3. living_ins =html.xpath("//div[@class='livezs']/ul")
  4. today_living = ''
  5. for living_in in living_ins:
  6. today_living += living_in.xpath("./li[1]/span/text()")[0]
  7. today_living += living_in.xpath("./li[1]/em/text()")[0] + ':'
  8. today_living += living_in.xpath("./li[1]/p/text()")[0] + ' '
  9. today_living += living_in.xpath("./li[2]/a/em/text()")[0] + ' '
  10. today_living += living_in.xpath("./li[2]/a/p/text()")[0] + ' '
  11. today_living += living_in.xpath("./li[3]/em/text()")[0] + ':'
  12. today_living += living_in.xpath("./li[3]/p/text()")[0] + ' '
  13. today_living += living_in.xpath("./li[4]/a/em/text()")[0] + ' '
  14. today_living += living_in.xpath("./li[4]/a/p/text()")[0] + ' '
  15. today_living += living_in.xpath("./li[6]/em/text()")[0] + ':'
  16. today_living += living_in.xpath("./li[6]/p/text()")[0]
  17. return today_living

  第二步:抓取某网经典唯美励志语录,为了每次发送或者回复都有信息感,博主抓取了10个数据,并进行随机返回:

  1. def Soul():
  2. html = etree.HTML(res)
  3. soul_sen = html.xpath("//div[@class='mLeft']")
  4. soul_dict = {}
  5. for soul_s in soul_sen:
  6. soul_dict[1] = soul_s.xpath('./div[1]/div[2]/div[2]/text()')[0].strip()
  7. soul_dict[2] = soul_s.xpath('./div[2]/div[2]/div[2]/text()')[0].strip()
  8. soul_dict[3] = soul_s.xpath('./div[3]/div[2]/div[2]/text()')[0].strip()
  9. soul_dict[4] = soul_s.xpath('./div[4]/div[2]/div[2]/text()')[0].strip()
  10. soul_dict[5] = soul_s.xpath('./div[5]/div[2]/div[2]/text()')[0].strip()
  11. soul_dict[6] = soul_s.xpath('./div[6]/div[2]/div[2]/text()')[0].strip()
  12. soul_dict[7] = soul_s.xpath('./div[7]/div[2]/div[2]/text()')[0].strip()
  13. soul_dict[8] = soul_s.xpath('./div[8]/div[2]/div[2]/text()')[0].strip()
  14. soul_dict[9] = soul_s.xpath('./div[9]/div[2]/div[2]/text()')[0].strip()
  15. soul_dict[10] = soul_s.xpath('./div[10]/div[2]/div[2]/text()')[0].strip()
  16. i = random.randint(1,10)
  17. return soul_dict[i]

  (2)开始我们的重头戏,博主选择的是wxpy库,需要导入的库如下:

  1. import time
  2. import json
  3. import requests
  4. import datetime
  5. import threading
  6. from queue import Queue
  7. import schedule
  8. import wxpy
  9. from weather import WeatherSpider
  10. from soul import Soul
  11. bot = wxpy.Bot(cache_path=True)

  现在先设置定时器,你可以设置多个的啦,博主只设置了早上:

  1. schedule.every().day.at("10:01").do(send)
  2. while True:
  3. schedule.run_pending()
  4. time.sleep(1)

  接着,我们先获取抓取内容,微信好友数据,引入创建多线程:

  1. def send():
  2.  
  3. wea_ls = '早上好,今天又是元气满满的一天\n' + WeatherSpider('101271610').run() +'您可以:'+ '\n回复"成都"获取成都天气\n回复"唯美"随机获取励志唯美语录'
  4. send_queue = Queue()
  5.  
  6. fris = bot.friends().search('') # 这里填空会向所有好友的发送,或者填你想要单独发送的人
  7. for fri in fris:
  8. send_queue.put(fri)
  9. t_list = []
  10. for i in range(3):
  11. t_msend = threading.Thread(target=more_thread, args=(send_queue, wea_ls))
  12. t_list.append(t_msend)
  13. for t in t_list:
  14. t.setDaemon(True)
  15. t.start()
  16. for q in [send_queue]:
  17. q.join()
  18. print("主线程结束")

  然后,开始向好友发送数据:

  1. def more_thread(send_queue, wea_ls):
  2. while True:
  3. try:
  4. friend = send_queue.get()
  5. friend.send(wea_ls)
  6. print("发送成功,a:",friend)
  7. except Exception as ret:
  8. time.sleep(1) # 如果你发送的好友很多,时间可以设置大一点,防止微信发送频繁,导致发送失败
  9. continue # 这里不建议加continue,依个人微信情况而定吧
  10.   send_queue.task_done()

  这里开始监听消息,并向朋友回送,一定要过滤掉群消息和公众号消息,具体为什么后面告诉你:

  1. @bot.register()
  2. def rcv_message(msg):
  3. sender = str(msg.sender)
  4. if '<MP:'in str(sender) or '<Group:' in str(sender): # 这里过滤掉群消息和公众号消息
  5. return
  6. now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  7. # print(now)
  8. recv_save = ''
  9. rev_save = '发送人:'+ sender +" 内容:"+ msg.text + ' ' + now
  10. print(rev_save)
  11. with open('wechat.md','a') as f: # 这里我们要把朋友发送的消息进行保存,方便查看以免遗漏重要消息
  12. f.write(rev_save)
  13. f.write('\n')
  14. if msg.text == '成都':
  15. wea_cd = '成都' + WeatherSpider('').run()
  16. return wea_cd
  17. elif msg.text == '唯美':
  18. return Soul()
  19. else:
  20. try:
  21. return robot_tuling(msg.text)
  22. except Exception as ret:
  23. fri_me = bot.friends().search('virtual')[0]
  24. fri_me.send("发送错误,信息:%s" % ret)
  25. return ("主人不在所以我智商为0了,请尝试下回复(唯美)随机获取励志唯美语句")

  下面接入图灵机器人,让实现智能聊天回复:

  1. def robot_tuling(text):
  2. url = "http://www.tuling123.com/openapi/api"
  3. api_key = "a3c47b29c497e87ab0b6e566f32" # 这里我已经修改,需要自己申请一个咯
  4. payload = {
  5. "key": api_key,
  6. "info": text,
  7. }
  8. rec = requests.post(url, data=json.dumps(payload))
  9. result = json.loads(rec.content)
  10. # print(result["text"])
  11. if result["text"] == "亲爱的,当天请求次数已用完。":
  12. return "主人不在所以我智商为0了,尝试下回复(唯美)随机获取励志唯美语句"
  13. return result["text"]

  好了,所有工作完成,看看效果,记得屏蔽了公众号,不然会有下面效果:

关注公众号「互联网专栏」,后台回复:wechat,获取本文全套代码!

python微信聊天机器人改进版,定时或触发抓取天气预报、励志语录等,向好友推送的更多相关文章

  1. 手把手教你用Python代码实现微信聊天机器人 -- Python wxpy

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 来学习了,微信聊天机器人. 环境要求: Windows / Li ...

  2. 【翻译】用AIML实现的Python人工智能聊天机器人

    前言 用python的AIML包很容易就能写一个人工智能聊天机器人. AIML是Artificial Intelligence Markup Language的简写, 但它只是一个简单的XML. 下面 ...

  3. 使用图灵机器人api搭建微信聊天机器人php实现

    之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.yshizi.cn/131.html 逻辑如下: 下面我简单介绍一下步 ...

  4. 使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道

    使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道 使用python/casperjs编写终极爬虫-客户端App的抓取

  5. Python 3.X 要使用urllib.request 来抓取网络资源。转

    Python 3.X 要使用urllib.request 来抓取网络资源. 最简单的方式: #coding=utf-8 import urllib.request response = urllib. ...

  6. 【Python撩妹合集】微信聊天机器人,推送天气早报、睡前故事、精美图片分享

    福利时间,福利时间,福利时间 如果你还在为不知道怎么撩妹而烦恼,不知道怎么勾搭小仙女而困惑,又或者不知道怎么讨女朋友欢心而长吁短叹. 那么不要犹豫徘徊,往下看.接下来我会分享怎么使用 Python 实 ...

  7. SAP成都研究院飞机哥: SAP C4C中国本地化之微信聊天机器人的集成

    今天的文章仍然来自Jerry的老同事,SAP成都研究院的张航(Zhang Harry).关于他的背景介绍,请参考张航之前的文章:SAP成都研究院飞机哥:程序猿和飞机的不解之缘.下面是他的正文. 大家好 ...

  8. Python 简易聊天机器人

    聊天机器人 | |-----MySql | |---module--"逻辑运算层" | | | |---ciku--"与词库交互" | | | |---dict ...

  9. python爬虫(一)_爬虫原理和数据抓取

    本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...

随机推荐

  1. sudo apt-get 与 yum安装有啥区别

    rpm包和deb包是两种Linux系统下最常见的安装包格式,在安装一些软件或服务的时候免不了要和它们打交道. rpm包主要应用在RedHat系列包括 Fedora等发行版的Linux系统上, deb包 ...

  2. javascript DOM编程艺术(检测与性能优化)

    一.对象检测(是否支持js方法):只有支持了该方法才可调用 if(!getElementById || getElementsByTagName){ return false; } 二.性能考滤 1. ...

  3. 网络传输数据封装详解(IP,UDP,TCP)

    IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节.  ...

  4. 【转】Python的下划线

    原文: 1. Python中的下划线(译文) 2. [转]关于python中带下划线的变量和函数的意义 总结: 1. 单下划线开头.保护变量,不可被其他包导入使用,除非在__all__声明可以显示引用 ...

  5. 洛谷 P2725 解题报告

    P2725 邮票 Stamps 题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K -- 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描 ...

  6. 洛谷 P2764 解题报告

    P2764 最小路径覆盖问题 问题描述: 给定有向图\(G=(V,E)\).设\(P\) 是\(G\) 的一个简单路(顶点不相交)的集合.如果\(V\) 中每个顶点恰好在\(P\) 的一条路上,则称\ ...

  7. Windows驱动开发入门指引

       1.  前言 因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结. 对于驱动开发的开发指引,微软 ...

  8. Eclipse安装Jetty插件

    通过Eclipse MarketPlace安装Jetty插件. Jetty下载 1.  2.3.4.5. 注:在使用Jetty的时候,同一个Project中,不可以同时存在两个版本的库,否则会出现找不 ...

  9. 使用WampServer和DVWA在Windows10上搭建渗透测试环境

    前言: DVWA是一个具有脆弱性的Web测试应用,需要PHP和MySQL的环境支持.我们可以手动配置DVWA所需的运行环境,也可以使用WampServer进行搭建.WampServer是集成了Apac ...

  10. zookeeper 配置文件conf目录下 zoo文件 配置详解

    clientPort:客户端尝试连接server的端口号 (对外服务端口) 通常为2181 dataDir:存放快照文件snapshot的目录.(储存数据的目录) dataLogDir:事务日志存放位 ...