最近想着做一个微信机器人,主要想要实现能够每天定时推送天气预报或励志语录,励志语录要每天有自动更新,定时或当有好友回复时,能够随机推送不同的内容。于是开始了分析思路。博主是采用了多线程群发,因为微信对频繁发送消息过快还会出现发送失败的问题,因此还要加入time.sleep(1),当然时间根据自身情况自己定咯。

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

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

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

def get_content(self, html_str):html = etree.HTML(html_str)weather_ts = html.xpath("//div[@id='7d']/ul") today_w = ''tomorrow_w = ''for weather_t in weather_ts:today_w += weather_t.xpath("./li[1]/h1/text()")[0] + ' 'today_w += weather_t.xpath("./li[1]/p[1]/text()")[0] + ' 'today_w += weather_t.xpath("./li[1]/p[2]/i/text()")[0] + ' 'today_w += '风向' + weather_t.xpath("./li[1]/p[3]/i/text()")[0]tomorrow_w += weather_t.xpath("./li[2]/h1/text()")[0] + ' 'tomorrow_w += weather_t.xpath("./li[2]/p[1]/text()")[0] + ' 'tomorrow_w += '风向' + weather_t.xpath("./li[2]/p[3]/i/text()")[0]all_w = today_w + '--' + tomorrow_wreturn all_w

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

def get_content1(self, html_str):html = etree.HTML(html_str)living_ins =html.xpath("//div[@class='livezs']/ul")today_living = ''for living_in in living_ins:today_living += living_in.xpath("./li[1]/span/text()")[0]today_living += living_in.xpath("./li[1]/em/text()")[0] + ':'today_living += living_in.xpath("./li[1]/p/text()")[0] + ' 'today_living += living_in.xpath("./li[2]/a/em/text()")[0] + ' 'today_living += living_in.xpath("./li[2]/a/p/text()")[0] + ' 'today_living += living_in.xpath("./li[3]/em/text()")[0] + ':'today_living += living_in.xpath("./li[3]/p/text()")[0] + ' 'today_living += living_in.xpath("./li[4]/a/em/text()")[0] + ' 'today_living += living_in.xpath("./li[4]/a/p/text()")[0] + ' 'today_living += living_in.xpath("./li[6]/em/text()")[0] + ':'today_living += living_in.xpath("./li[6]/p/text()")[0]return today_living

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

def Soul():url = 'http://www.59xihuan.cn/'headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)"}res = requests.get(url, headers=headers).contenthtml = etree.HTML(res)soul_sen = html.xpath("//div[@class='mLeft']")soul_dict = {}for soul_s in soul_sen:soul_dict[1] = soul_s.xpath('./div[1]/div[2]/div[2]/text()')[0].strip()soul_dict[2] = soul_s.xpath('./div[2]/div[2]/div[2]/text()')[0].strip()soul_dict[3] = soul_s.xpath('./div[3]/div[2]/div[2]/text()')[0].strip()soul_dict[4] = soul_s.xpath('./div[4]/div[2]/div[2]/text()')[0].strip()soul_dict[5] = soul_s.xpath('./div[5]/div[2]/div[2]/text()')[0].strip()soul_dict[6] = soul_s.xpath('./div[6]/div[2]/div[2]/text()')[0].strip()soul_dict[7] = soul_s.xpath('./div[7]/div[2]/div[2]/text()')[0].strip()soul_dict[8] = soul_s.xpath('./div[8]/div[2]/div[2]/text()')[0].strip()soul_dict[9] = soul_s.xpath('./div[9]/div[2]/div[2]/text()')[0].strip()soul_dict[10] = soul_s.xpath('./div[10]/div[2]/div[2]/text()')[0].strip()i = random.randint(1,10)return soul_dict[i]

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

import time
import json
import requests
import datetime
import threading
from queue import Queue
import schedule
import wxpy
from weather import WeatherSpider
from soul import Soul
bot = wxpy.Bot(cache_path=True)

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

def main():print("程序开始运行...")schedule.every().day.at("10:01").do(send)while True:schedule.run_pending()time.sleep(1)

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

def send():wea_ls = '早上好,今天又是元气满满的一天\n' + WeatherSpider('101271610').run() +'您可以:'+ '\n回复"成都"获取成都天气\n回复"唯美"随机获取励志唯美语录'send_queue = Queue()fris = bot.friends().search('') # 这里填空会向所有好友的发送,或者填你想要单独发送的人for fri in fris:send_queue.put(fri)t_list = []for i in range(3):t_msend = threading.Thread(target=more_thread, args=(send_queue, wea_ls))t_list.append(t_msend)for t in t_list:t.setDaemon(True) #把子线程设置为守护线程,该线程不重要主线程结束,子线程结束t.start()for q in [send_queue]:q.join() #让主线程等待阻塞,等待队列的任务完成之后再完成print("主线程结束")

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

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

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

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

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

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

好了,所有工作完成,看看效果。

【参考】:

1、https://www.jb51.net/article/160194.htm

2、https://www.jb51.net/article/136023.htm

Python创建微信聊天机器人相关推荐

  1. python接入微信_使用python接入微信聊天机器人

    本文实例为大家分享了python接入微信聊天机器人的具体代码,供大家参考,具体内容如下 1.安装库wxpy: pip install -U wxpy or pip install -U wxpy -i ...

  2. python实现微信聊天机器人

    python实现微信聊天机器人 具备基础:会编程就ok 电脑环境:已经安装过python,在命令行输入python能成功就行 [外链图片转存失败(img-CuiDMIDq-1564199551669) ...

  3. 利用python实现微信聊天机器人(需自己设置关键字及回复内容)

    本人为python小白写此帖纪念用python写的第一个脚本 微信聊天机器人 1.通过查找截图进行鼠标点击操作  2.通过直接输入屏幕中的坐标进行鼠标点击操作(在复制他人最新信息时采用指定坐标双击) ...

  4. Python Wechaty 微信聊天机器人 padlocal协议搭建指南

    python版本推荐3.9+ 微信机器人框架:Wechaty Python-Wechaty中文手册 开发前需要准备: Linux服务器(CentOS 8.0+,Python环境,Docker) 本地P ...

  5. 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人

    需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...

  6. AI聊天机器人接口制作php,使用图灵api创建微信聊天机器人_php技巧

    需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...

  7. 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人_PHP

    需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...

  8. Python制作微信聊天机器人

    可以借助图灵机器人和itchat插件来模拟机器人聊天. 1.注册图灵机器人账号 在官网注册(http://www.tuling123.com),注册完之后可以创建一个机器人,最终需要机器人的apike ...

  9. 用python创建微信机器人_用Python创建微信机器人

    原标题:用Python创建微信机器人 文/裸睡的猪哥 图片来源于网络 微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的便是如何用Python来做一 ...

最新文章

  1. 程序员到底为什么要掌握数据结构与算法?
  2. centos 关机命令_Docker 常用命令速查手册
  3. S/4HANA extension field search的SQL语句是在什么地方生成的
  4. 单调栈 leetcode整理(一)
  5. 树莓派安装mysql5.6_Linux上安装MySQL5.6
  6. Modularity(模块化-UMD通用模式)
  7. dsp 链接命令文件的写法
  8. Spring 常见注解原理和自定义@interface注解
  9. flashfxp3.41中文版注册码:(适合最新版本)
  10. 【CocosCreator 3.x】实现双人同屏效果 => 攻略
  11. 英文词源 —— 法语、西班牙语、古希腊语
  12. java计算机毕业设计Web前端开发技术儿童教育网站MyBatis+系统+LW文档+源码+调试部署
  13. gitlab上fork别人的代码,如何更新主分支最新代码
  14. 【Arduino】继电器控制水泵抽水
  15. 云端运行python_云端部署python代码及安装MySQL
  16. oracle dbf 超大,system01.dbf文件过大——SYSTEM表空间AUD$使用空间过大问题处理
  17. 编写一个学生类student,包含的属性有学号,姓名,年龄
  18. jdbc是啥?为什么使用jdbc?jdbc的原理是什么?
  19. Visial Studio中“变量已被优化掉 因而不可用”的解决方案
  20. Whither Speech Recognition: 25年又一个25年

热门文章

  1. vSphere(一) 标准交换机和分布式交换机
  2. 【嵌入式Linux应用开发】SquareLine Studio与LVGL模拟器
  3. 2021数据库课程设计培训笔记:【navicat】部分
  4. 信息学奥赛一本通高手训练题解目录
  5. 无失真传输matlab原理,信号与系统实验(MATLAB版)实验23综合实验4——无失真传输系统.ppt...
  6. c语言求圆周率 . 4,C语言求圆周率π(三种方法)(4页)-原创力文档
  7. em算法直观_直观地解释了10种图形算法
  8. matlab清除所有图形窗口,matlab图形操作基础
  9. Microsoft Office Visio 2007打开总是显示Windows正在配置...请稍后解决办法
  10. (DEAP)基于图卷积神经网络的脑电情绪识别(附代码)