最近每天早上准点出门去图书馆,中午回来吃饭睡午觉,晚上吃饭看视频,整个人都快整蒙了。然后就想起来干点其他的事来改善改善我这平淡的生活。


之前写的是一个itchat实现微信消息的自动回复,然后是调用的图灵机器人实现的自动对话。这里的QQ自动回复就没有用机器人自动回复了,而是从网页上爬取的祝福语,然后保存到数据库中,在QQ收到消息的时候,随机从数据库中取出一句祝福语回复发消息的好友。

开发环境:windows10 + pycharm

所需要的包为:requests、peewee、time、random、lxml、qqbot

首先在pycharm中新建一个工程,在工程下面创建python文件。先建立一个数据库用来保存爬取到的祝福语内容,以便自动回复的时候能够随机从数据库中提取:
#coding : UTF-8 #peewee是一种轻量级的ORM框架 #ORM(Object Relational
Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。 import peewee #创建数据库
db = peewee.SqliteDatabase("text.db") #创建数据表 class Text(peewee.Model) : #定义字段
text = peewee.TextField() class Meta : #库表关联 database = db if __name__ ==
"__main__" : Text().create_table()
运行上面的程序,在项目下会出现一个.db
的文件,就是创建的数据库,可以自行用数据库工具打开,这里就不演示了。然后要做的就是从祝福语网站上爬取祝福语,祝福语的网站为:

http://www.aizhufu.cn/duanxinku/column/77/1.html
<http://www.aizhufu.cn/duanxinku/column/77/1.html>

爬取祝福语具体的就不用解释了,以前写了好多爬虫,爬取网页内容的也有,如果有不清楚的可以看看以前的博客。下面附上爬取祝福语的具体代码以及部分代码的解释:
#coding : UTF-8 import requests from lxml import etree from models import Text
url_list = [] for i in range(1,11) : urls =
"http://www.aizhufu.cn/duanxinku/column/77/" + str(i) + ".html"
url_list.append(urls) headers = { "Upgrade-Insecure-Requests" : "1",
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36", } for url in url_list :
res = requests.get(url=url, headers=headers) res.encoding = "UTF-8" html =
etree.HTML(res.text) text_list =
html.xpath("//ul[@class='list']/li/span[2]/text()") for text in text_list :
if(text != "内容"): #实例化数据库模型 t = Text() #字段赋值 t.text = text #保存字段 t.save()
print(text) #这里只是测试是否爬取到祝福语内容 print()
然后查看数据库是否已经保存爬取到的祝福语(这里只爬取了100条作为实验),数据库如下图所示:

 这就完成了祝福语的爬取,接下来就是用qqbot来将消息发送出去。qqbot是采用的smart qq机制,也就是网页版QQ。

最后附上自动回消息的部分,只需要将上述几个部分放到一个工程里即可测试,有兴趣的可以尝试一下下。
#coding : UTF-8 import qqbot import random import time from models import Text
#首先查询数据库 messages = Text.select() #创建一个消息列表 text_list = [] #将数据库的消息放到列表中 for
message in messages : text_list.append(message.text) @qqbot.QQBotSlot def
onQQMessage(bot,contact,member,content) : #当内容非空的时候,回复消息 if(content != ""):
#随机从列表中取出一条祝福语 sendData = random.choice(text_list) #将祝福语发送给那个给你发消息的人
bot.SendTo(contact,sendData) time.sleep(0.5) if __name__ == "__main__" :
qqbot.RunBot()
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信