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

  最近想着做一个微信机器人,主要想要实现能够每天定时推送天气预报或励志语录,励志语录要每天有自动更新,定时或当有好友回复时,能够随机推送不同的内容。于是开始了分析思路。博主是采用了多线程群发,因为微信对频繁发送消息过快还会出现发送失败的问题,因此还要加入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_w     return 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).content
    html = 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):  # 这里过滤掉群消息和公众号消息
        return
    now = datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S‘)
    # print(now)
    recv_save = ‘‘
    rev_save = ‘发送人:‘+ sender +" 内容:"+ msg.text + ‘ ‘ + now
    print(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_cd
    elif 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 = "a3c47b29c497e87ab0b6e566f32"   # 这里我已经修改,需要自己申请一个咯
    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"]

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

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

原文地址:https://www.cnblogs.com/spiderc/p/10764299.html

时间: 2024-11-05 13:34:19

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

微信聊天机器人

本文目录 一 简介 二 登录微信 三 微信好友男女比例 四 微信好友地域分布 五 微信聊天机器人 回到目录 一 简介 wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展.实现了微信登录.收发消息.搜索好友.数据统计等功能. 总而言之,可用来实现各种微信个人号的自动化操作.(http://wxpy.readthedocs.io/zh/latest/bot.html) 安装:wxpy 支持 Python 3.4-3.6,以及 2.7

分分钟搭建自己的微信聊天机器人

利用图灵机器人分分钟搭建自己的微信聊天机器人 需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后在图灵机器人网站上登录你的图灵账号,可以看到如截图所示的界面,在"机器人设定"界面可以进行机器人昵称.年龄.性别等信息的设定,在"机器人调教"界面可以教你的机器人回答特定问题,"知识库"可以导入知识库,增

微名汇-微信公众平台功能开发(微信聊天机器人)

因为现在小黄鸡智能聊天机器人接口能免费试用7天,7天之后会收费这对于很多用户来说感觉不划算.所以我找了另一个接口:小i机器人,并且完全免费.本文介绍如何在微信公众平台中使用小i智能聊天api接口开发智能聊天机器人. 小i机器人是全球用户量最大的中文聊天机器人,最早在MSN上出现,后拓展到QQ.短信.网页等交互平台上,拥有超过1亿的用户.2012年2月,小i机器人整合了自然语音识别功能,并陆续发布了智能手机.智能电视以及电话上的语音交互版本. 小i机器人申请地址为http://cloud.xiao

自己动手做个微信聊天机器人

长夜慢慢无人聊天, 自己动手做个微信聊天机器人陪自己. 智力太低, 还是让他调戏别人吧. 看了上面的动画图片是不是有人好奇程序是怎么实现的? 解决方案其实很简单: 1. 通过微信的web接口可以实现自动回复.登录.发图片.自动加好友等等的功能, 你可以通过wx.qq.com调试得到接口,当然也可以通过baidu搜索到别人已经弄到的api. 我这里主要用到了登录.扫马登陆.同步联系人.同步消息接口.掉线自动重连.获取图片.获取头像.获取微信群成员.发送图片.发送表情.发送mp3. 撤回消息.发送文

微信聊天机器人开发 java源代码 免费接口 图灵机器人

微信聊天机器人开发  java 图灵机器人提供免费接口,并且支持java语言开发,同时提供开发说明: 图灵机器人开发说明连接: http://www.tuling123.com/openapi/cloud/access_api.jsp 实例: /** 调用图灵机器人平台接口 */ public static void main(String[] args) throws IOException { String APIKEY = "开发者注册帐号,激活之后即可获得"; String I

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

之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.yshizi.cn/131.html 逻辑如下: 下面我简单介绍一下步骤. 首先,你需要下载我的微信助手,下载地址请参考我的博客文章: 通过对微信pc hook实现微信助手. 申请图灵机器人,并认证.申请地址,使用api接入并获取apikey(详细请参考图灵机器人官网) . 使用php实现访问图灵机器人api. php实现代码如下: <?php class Tulin

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

Python 3.X 要使用urllib.request 来抓取网络资源. 最简单的方式: #coding=utf-8 import urllib.request response = urllib.request.urlopen('http://python.org/') buff = response.read() #显示 html = buff.decode("utf8") response.close() print(html) 使用Request的方式: #coding=ut

python实现爬虫(一)--- Scrapy框架抓取豆瓣书籍信息

Scrapy是一个用python实现都爬虫框架,简单易用,功能强大,只需要在框架的基础上自定义自己的分析规则即可,具体如何新建工程等待都在官方文档上面讲解得非常清楚,官方文档tutorial(http://doc.scrapy.org/en/latest/intro/tutorial.html)请保证下载较新版本的Scrapy(我的是0.24.2,scrapy -v)旧版本会出现一些问题. 下面我使用Scrapy抓取豆瓣上面编程书籍的一些简单信息 一.准备爬取的页面如下,新建一个douban工程

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

最近微信公众平台开发是热门,我也跟风做了一个陪聊的公众号. 其实类似的自动回话程序早就有了,比如前一阵很火的小黄鸡(还是小黄鸭来着?).但尽管是跟风,也要体现一些不同.别人做的都是中文陪聊,咱就来做个英语陪聊. 不管是中文还是英文,做起来都一样,都是利用网络上的接口.或者你也可以试着自己开发一个陪聊程序. 随便在网上搜了一个英语聊天机器人的网址:http://www.pandorabots.com/pandora/talk?botid=f5d922d97e345aa1   咱们就利用这个网址来做