Python创建微信聊天机器人

article/2025/9/24 22:46:25

最近想着做一个微信机器人,主要想要实现能够每天定时推送天气预报或励志语录,励志语录要每天有自动更新,定时或当有好友回复时,能够随机推送不同的内容。于是开始了分析思路。博主是采用了多线程群发,因为微信对频繁发送消息过快还会出现发送失败的问题,因此还要加入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 


http://chatgpt.dhexx.cn/article/DOQ6LDKp.shtml

相关文章

三步轻松打造微信聊天机器人(附源码)

最近微信公众平台开发是热门&#xff0c;我也跟风做了一个陪聊的公众号。 其实类似的自动回话程序早就有了&#xff0c;比如前一阵很火的小黄鸡&#xff08;还是小黄鸭来着&#xff1f;&#xff09;。但尽管是跟风&#xff0c;也要体现一些不同。别人做的都是中文陪聊&#xff…

实现微信聊天机器人-中级篇

一、ChatterBot工作原理 Chatbot Engine的技术框架采用了开源项目ChatterBot (https://github.com/gunthercox/ChatterBot)。 ChatterBot是一个python库,利用它可以轻松的创建对话软件。 一个未经训练的ChatterBot实例开始不知道如何沟通,每次用户输入一个语句,ChatterBo…

微信聊天机器人,不使用iChat,可以群聊

目录 1. 微信聊天界面截图 2. 图片文字识别 3. 获取最新消息 3.1 独聊 3.2 群聊 4. 机器人聊天系统 5. 成果展示 6. 全部代码 本文参考大神【喵王叭】的文章&#xff1a;python实现微信、QQ聊天自动回复【纯物理】_喵王叭的博客-CSDN博客_python自动回复纯物理方式实现微…

tomcat的开发模式和生产模式

tomcat这两种模式对大家的影响主要是在jsp的开发当中。大家都知道jsp需要先编译成servlet源文件并编译为字节码&#xff0c;即生成.class文件才可以执行&#xff0c;所以在jsp文件首次运行时先要进行编译导致运行较慢&#xff0c;之后的访问都会直接进入执行阶段。 在开发模式下…

chrome开发模式下清除缓存问题

介绍&#xff1a; 在开发的时候经常会遇到这样的问题&#xff0c;后台js修改&#xff0c;前台怎么也清除不了缓存的问题&#xff0c;包括使用ctrlf5都没有办法处理,今天教大家一种方式&#xff0c;在chrome中采用开发模式下彻底清除缓存问题 一、打开chrome&#xff0c;随便访…

微信小程序-云开发模式pk传统开发模式【详细】

👨‍🎓作者:bug菌 ✏️博客:CSDN、掘金等 💌公众号:猿圈奇妙屋 🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。 🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。 小伙伴们,说起开发微…

软件开发模式之敏捷开发(scrum)

简介 这几年关于敏捷开发在互联网企业中越来越广泛被使用到&#xff0c;运用的比较多的当属scrum敏捷开发和xp敏捷开发&#xff0c;人人都在谈论敏捷开发。那什么才是敏捷开发呢&#xff1f; 目录 什么是敏捷开发&#xff1f;传统的开发模式和敏捷开发模式的对比&#xff1f…

特性分支开发模式 or 主干开发模式,团队该如何选择?

对于一个具有一定规模的开发团队而言&#xff0c;团队 Devops 的建设都是迈向高效开发的必经之路&#xff0c;即便没有达到 Devops 建设的程度&#xff0c;为了团队中开发之间的高效协作&#xff0c;基于版本管理工具来选择团队合理的代码分支开发模式都是非常重要的一环。对于…

vue项目的三种开发模式

vue项目的三种开发方式 文章目录 vue项目的三种开发方式1.原始无合作开发2.手动模块化开发3.自动模块化开发1、开发流程2、配置webpack-dev-server1.下载安装包2.配置package.json3、配置webpack.config.js4、执行程序5、调试程序 1.原始无合作开发 包含两个文件&#xff1a;v…

介绍两种常见软件开发模式:“敏捷”和“瀑布”

在软件开发时&#xff0c;经常面对的第一个项目实现决策是“我们应该使用哪种开发方法?”这是一个引起很多讨论(和激烈辩论)的话题。如果您以前没有使用过这种方法&#xff0c;那么适当了解开发方法和理论是必要的;简单地说&#xff0c;这是一种组织软件开发工作的方法。这与项…

常用的4种开发模式

常用的4种开发模式 1. 瀑布式开发 瀑布式开发是由W.W.Royce在1970年提出的软件开发模型,是一种比较老的计算机软件开发模式,也是典型的预见性的开发模式。在瀑布式开发模式中,开发严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤进行,步骤的成果作为衡量进…

小程序:游客模式--开发模式

一、简介 1.1、普通的开发可以正常进行 1.2、小程序开发工具不能预览&#xff0c;不能真机调试&#xff0c;调用微信扫码不能走成功的回调 等等 1.3、仔细观察开发者工具提示当前为“游客模式”&#xff0c;作为开发者需要切换到可以正常开发的“开发模式” 二、解决 2.1、开…

web开发模式+身份认证

一、web开发模式 目前主流的 Web 开发模式有两种&#xff0c;分别是&#xff1a; 1.基于服务端渲染的传统 Web 开发模式&#xff1a;  概念&#xff1a;服务器发送给客户端的 HTML 页面&#xff0c;是在服务器通过字符串的拼接&#xff0c;动态生成的。因此&#xff0c;客户端…

微信小程序——传统开发模式与云开发模式对比

目 录 1、传统开发模式与云开发模式的对比图 2、云开发技术能力说明 3、云开发技术特点 1、传统开发模式与云开发模式的对比图 通过传统开发模式与云开发模式的对比图可以看出传统开发模式需要开发者关注后端服务器&#xff0c;比如数据库、文件存储、负载均衡、异地容灾、…

前后端分离开发模式介绍

1.1 什么是前后端分离 前后端分离是目前一种非常流行的开发模式&#xff0c;它使项目的分工更加明确&#xff1a; 后端&#xff1a;负责处理、存储数据前端&#xff1a;负责显示数据 前端和后端开发人员通过 接口 进行数据的交换。 1.2 为什么要进行前后端分离 前后端可以…

敏捷开发模式

1、敏捷开发的概念 从1990年代开始逐渐引起广泛关注&#xff0c;是一种以人为核心、迭代、循序渐进的开发方法。强调以人为本&#xff0c;专注于交付对客户有价值的软件。是一个用于开发和维持复杂产品的框架。 2、敏捷开发的流程 (图为禅道敏捷开发流程管理) 2.1 产品负责人将…

Django开发模式与流程

Python的WEB框架有Django、Tornado、Flask 等多种&#xff0c;Django相较与其他WEB框架其优势为&#xff1a;大而全&#xff0c;框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。 一.Django的MTV开发模式与一般的MVC开发模式区别 1.MVC模式 在MVC模式中&am…

【面向对象】DDD(一):传统开发模式 VS DDD 开发模式

我们都知道&#xff0c;很多业务系统都是基于 MVC 三层架构来开发的。实际上&#xff0c;更确切点讲&#xff0c;这是一种基于贫血模型的 MVC 三层架构开发模式。虽然这种开发模式已经成为标准的 Web 项目的开发模式&#xff0c;但它却违反了面向对象编程风格&#xff0c;是一种…

MVC开发模式

一.MVC设计模式 1.MVC模式&#xff08;Model-View-Controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff0…

项目的开发模式

开发模式大概可以分为两种&#xff1a; 1、大公司的开发模式&#xff1b; 2、外包的开发模式&#xff1b; 一、大公司的开发模式&#xff1b; 1. 市场调研 2. 项目需求会&#xff08;人员&#xff09; 产品市场运营UI开发后端前端项目经理测试–>web/ios/安卓安全 3. …