太棒了!快来领养一位你的虚拟女友冰冰吧-程序员宅基地

技术标签: python魔法师  

什么?都1202年了还有人没有女朋友?

咳咳,各位帅气的小哥哥怎么可能没有女朋友呢,这就马上安排。

呐,这就是今天我要带各位小伙伴“领养”的女友冰冰~

啊,冰冰真好看。

今天天气很热,但我的心还是冰冰的。

想要一位这样的女朋友吗?

想要和冰冰说上一些sao里sao气的悄悄话吗?

想要冰冰回复你的来信并给你私发邮件附上她的美照吗?

那么就和我一起来吧!

目录

什么?都1202年了还有人没有女朋友?

一、爬取冰冰动图

二、自动生成sao话

三、冰冰回信ing

四、冰冰向您发送了新邮件

一、爬取冰冰动图

第一步很简单,上某度就可以直接搜到冰冰的照片。

右键选择你喜欢的图片,在新标签页中打开图片,复制上方的url,如图:

用requests.get(url).content获取图片,并用with open保存在本地。

我选取了3张冰冰的gif动图并保存在一个列表中并随机返回一张,各位想扩充冰冰图库很容易。

def getbb():
    w0='https://img1.baidu.com/it/u=1762637264,598758602&fm=26&fmt=auto&gp=0.jpg'
    w1='https://img1.baidu.com/it/u=2231058723,1803013600&fm=11&fmt=auto&gp=0.jpg'
    w2='https://img0.baidu.com/it/u=3960011140,3634140813&fm=11&fmt=auto&gp=0.jpg'
    wlist=[w0,w1,w2]
    global i
    i=random.randint(0,2)#随机选取一个冰冰动图
    url=wlist[i]
    req=requests.get(url).content
    with open(f'wbb{i}.gif','wb') as p:
        p.write(req)

二、自动生成sao话

这里的sao话是你想和冰冰说的话哦,你可以自己打字,当然你要是sao话都懒得自己说,我也帮你自动爬取了网上的文学诗篇哦,要多有诗人气质就多有气质。

也将此功能封装成一个函数如下:

def getwords():
    texts = []
    url = 'https://www.duanwenxue.com/huayu/lizhi/list_{}.html'.format(random.randint(1,114))
    response = requests.get(url)
    texts.append(response.text)
    articles = []
    for text in texts:
        soup = BeautifulSoup(text,'lxml')
        arttis = soup.find('div', class_='list-short-article').find_all('a', {'target': "_blank"})  # 寻找情话内容
            #  通过列表推导式以及for循环获取到每个a标签里面的text内容并通过strip去除空格
        articles.extend([arttis[i].text.strip() for i in range(len(arttis))])
    todaywords = articles[random.randint(0, len(articles)-1)]   # 随机选取其中一条情话
    return todaywords

三、冰冰回信ing

接下来要进入重点了,你给冰冰说话了,还要让冰冰给你回复。

这里用一个智能机器人模拟冰冰并生成回信内容。

现在的智能聊天机器人有不少,推荐有钱可以选图灵机器人,免费的可以用青云客。

此文用青云客实现,无需注册,直接调用接口即可,非常方便。

封装成一个函数,输入sao话,自动返回智能对话:

def qingyunke(msg):
    url = f'http://api.qingyunke.com/api.php?key=free&appid=0&msg={msg}'
    html = requests.get(url)
    return html.json()["content"]

读者有兴趣可以试一试这个功能,

将第二步爬取到的sao话作为函数的输入msg会发生很有趣的事:

四、冰冰向您发送了新邮件

最后就是要让冰冰给您发送私信并附上她的美照了~

可以用常见的邮箱实现,比如163邮箱或者QQ邮箱都可以。

这里以163邮箱为例,点击设置:

点击POP3/SMTP/IMAP:

点击开启IMAP/SMTP服务:

会生成一个授权码,这个授权码复制下来,后面需要用到。

下面是我写好的代码,你只需要填写你的账号和授权码就可以了哦。

def sendemail():
    msgword = getwords()
    res = qingyunke(msgword)
    xhx='你的163邮箱账号'#你实际使用的163邮箱账号
    pwd = '你的授权密码'#刚刚生成的163授权密码
    wy163list=[xhx]#收件人列表,可以扩充
    host_server = 'smtp.163.com'  #163邮箱smtp服务器
    sender = f'{xhx}@163.com' #发件人邮箱
    receiver = f'{wy163list[0]}@163.com'#收件人
    mail_title = '冰冰向您发送了新邮件' #邮件标题
    #邮件正文内容
    #为保证接口稳定,调用频率请控制在200次/10分钟
    mail_content = f"亲爱的{wy163list[0]},我是冰冰,<p>上次收到你给我的来信:<p>{msgword}<p>我很感动,特意给你回信并附上冰冰的美照哦~<p>现在我想对你说:<p>{res}<p>您好,<p>欢迎关注我的CSDN个人账号以获取最新创意好文,<p>开启python魔法之旅:</p> <p><a href='https://blog.csdn.net/x978404178?spm=1001.2100.3001.5343'>点击此处进入CSDN</a></p>"
    msg = MIMEMultipart()
    #将图片显示在正文
    global i
    with open(f'wbb{i}.gif', 'rb') as f:
        #图片添加到正文
        msgImage = MIMEImage(f.read())
        # 定义图片ID
    msgImage.add_header('Content-ID', '<image1>')
    msg.attach(msgImage)
    msg["Subject"] = Header(mail_title,'utf-8')
    msg["From"] =Header("冰冰","utf-8")
    msg["To"] = receiver
    msg.attach(MIMEText(mail_content,'html'))
    try:
        smtp = SMTP_SSL(host_server) # ssl登录连接到邮件服务器
        smtp.set_debuglevel(1) # 0是关闭,1是开启debug
        smtp.ehlo(host_server) # 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码
        smtp.login(sender,pwd)
        smtp.sendmail(sender,receiver,msg.as_string())
        smtp.quit()
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("无法发送邮件")

五、完整代码

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import random
import requests
from smtplib import SMTP_SSL
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.image import MIMEImage

def getbb():
    w0='https://img1.baidu.com/it/u=1762637264,598758602&fm=26&fmt=auto&gp=0.jpg'
    w1='https://img1.baidu.com/it/u=2231058723,1803013600&fm=11&fmt=auto&gp=0.jpg'
    w2='https://img0.baidu.com/it/u=3960011140,3634140813&fm=11&fmt=auto&gp=0.jpg'
    wlist=[w0,w1,w2]
    global i
    i=random.randint(0,2)#随机选取一个冰冰动图
    url=wlist[i]
    req=requests.get(url).content
    with open(f'wbb{i}.gif','wb') as p:
        p.write(req)

def getwords():
    texts = []
    url = 'https://www.duanwenxue.com/huayu/lizhi/list_{}.html'.format(random.randint(1,114))
    response = requests.get(url)
    texts.append(response.text)
    articles = []
    for text in texts:
        soup = BeautifulSoup(text,'lxml')
        arttis = soup.find('div', class_='list-short-article').find_all('a', {'target': "_blank"})  # 寻找情话内容
            #  通过列表推导式以及for循环获取到每个a标签里面的text内容并通过strip去除空格
        articles.extend([arttis[i].text.strip() for i in range(len(arttis))])
    todaywords = articles[random.randint(0, len(articles)-1)]   # 随机选取其中一条情话
    return todaywords

def qingyunke(msg):
    url = f'http://api.qingyunke.com/api.php?key=free&appid=0&msg={msg}'
    html = requests.get(url)
    return html.json()["content"]

def sendemail():
    msgword = getwords()
    res = qingyunke(msgword)
    xhx='你的163邮箱账号'#你实际使用的163邮箱账号
    pwd = '你的授权密码'#刚刚生成的163授权密码
    wy163list=[xhx]#收件人列表,可以扩充
    host_server = 'smtp.163.com'  #163邮箱smtp服务器
    sender = f'{xhx}@163.com' #发件人邮箱
    receiver = f'{wy163list[0]}@163.com'#收件人
    mail_title = '冰冰向您发送了新邮件' #邮件标题
    #邮件正文内容
    #为保证接口稳定,调用频率请控制在200次/10分钟
    mail_content = f"亲爱的{wy163list[0]},我是冰冰,<p>上次收到你给我的来信:<p>{msgword}<p>我很感动,特意给你回信并附上冰冰的美照哦~<p>现在我想对你说:<p>{res}<p>您好,<p>欢迎关注我的CSDN个人账号以获取最新创意好文,<p>开启python魔法之旅:</p> <p><a href='https://blog.csdn.net/x978404178?spm=1001.2100.3001.5343'>点击此处进入CSDN</a></p>"
    msg = MIMEMultipart()
    #将图片显示在正文
    global i
    with open(f'wbb{i}.gif', 'rb') as f:
        #图片添加到正文
        msgImage = MIMEImage(f.read())
        # 定义图片ID
    msgImage.add_header('Content-ID', '<image1>')
    msg.attach(msgImage)
    msg["Subject"] = Header(mail_title,'utf-8')
    msg["From"] =Header("冰冰","utf-8")
    msg["To"] = receiver
    msg.attach(MIMEText(mail_content,'html'))
    try:
        smtp = SMTP_SSL(host_server) # ssl登录连接到邮件服务器
        smtp.set_debuglevel(1) # 0是关闭,1是开启debug
        smtp.ehlo(host_server) # 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码
        smtp.login(sender,pwd)
        smtp.sendmail(sender,receiver,msg.as_string())
        smtp.quit()
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("无法发送邮件")

if __name__ == '__main__':
    getbb()
    sendemail()

运行时间大概在30s~1min30s哦,快登录你的邮箱查看冰冰给你的悄悄话吧。

效果如下:

好了,各位有没有get到冰冰呢?欢迎在下方评论区留言讨论哦。

对python有兴趣的同学可以加我微信共同学习交流:

我的微信号:Communistic_belief



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/x978404178/article/details/118549972

智能推荐

学习 图形着色器-理论与实践 graphic shaders - glman_图形着色器 理论与实践pdf-程序员宅基地

文章浏览阅读2.7k次。http://web.engr.oregonstate.edu/~mjb/glman/_图形着色器 理论与实践pdf

安装svn(Setup-Subversion-1.7.7)认证失败的解决办法,附加注册服务_svn安装no certification authorities found-程序员宅基地

文章浏览阅读4.9k次。服务器安装Setup-Subversion-1.7.7 安装路径:D:\Subversion在D:\根目录新建SVN目录做为svn的版本库目录。接着,在D:\SVN\目录下新建一个项目bobo目录。然后,在该目录上右键,选择:TortoiseSVN -> 在此创建版本库,点击“确定”(注意:不要创建目录结构-理由:由于本人对SVN不了解,经过测试,如果创建了目录结构,那么同步到客户端的项目_svn安装no certification authorities found

基于TypeScript的Node.js框架Nest.js,可查看中文文档深入学习-程序员宅基地

文章浏览阅读3.5k次。Nest是一套基于Node.js的强大的Web框架,可帮助你轻松构建出高效的、可扩展的应用程序。它是通过结合OOP(面向对象编程)和FP(函数式编程)的最佳理念,采用现代化JavaScript,使用TypeScript构建的。Nest不仅仅只是一套框架,因为它是基于绝妙的,著名的流行库Express和Socket.io构建的(你也可以根据自己的需求选择任何其他库),所以无需等待大型社区,可以直接使..._node得nest框架中文文档

unity序列帧的实现。包括三种效果,后续再补充_unity 序列帧换装-程序员宅基地

文章浏览阅读1.5k次。效果1:从头播放到尾效果2:重复播放效果3:正放、倒放交替播放using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class XuLieZhen : MonoBehaviour{ [Header("序列帧路径")] public string Path; [Header("更换间隔")] public fl_unity 序列帧换装

Android Studio一个连接SQLite数据库的登录注册实现_android sqllite tomcat-程序员宅基地

文章浏览阅读4.7w次,点赞129次,收藏751次。声明:AS版本为:3.4;JDK版本为:1.81、先看一下项目目录:2、新建一个AS项目,创建如上图所示的目录结构,然后添加内容:(1)修改添加布局文件:activity_main.xml:<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xm..._android sqllite tomcat

mysql的扩容_MySQL的InnoDB的扩容-程序员宅基地

文章浏览阅读189次。innodb_data_home_dir这是InnoDB表的目录共用设置。如果没有在 my.cnf 进行设置,InnoDB 将使用MySQL的 datadir 目录为缺省目录。如果设定一个空字串,可以在 innodb_data_file_path 中设定绝对路径。innodb_data_file_path单独指定数据文件的路径与大小。数据文件的完整路径由 innodb_data_home_dir ..._mysql 系统表空间扩容 nnodb_force_frecovery

随便推点

海思3559AV100实现8k文件编码_rk_mpi_cal_comm_getpicbuffersize-程序员宅基地

文章浏览阅读913次,点赞13次,收藏27次。有些小改动需要在common中改,都很简单就不写了,看一下就知道,另外我这边只测试了8k的一帧编码,如需连续编码视频需要再扩展一下,我这边由于公司项目安排就没再继续做了,测试出来8k文件编码的结果如下,颜色偏差是因为我的YUV和板子支持的YUV的存储顺序不一致,这里时间关系也就不调了,也算是顺利实现了芯片的8k文件编码。第二个函数是SAMPLE_VENC_CheckSensor,应该是检查镜头的分辨率支不支持要编的尺寸,这里我们先试的4k,所以也可以不管这个。_rk_mpi_cal_comm_getpicbuffersize

Android BLE 蓝牙通信库,2024年最新应届生面试销售岗位的面试问题技巧_android蓝牙通信-程序员宅基地

文章浏览阅读919次,点赞12次,收藏10次。然后根据自定义的协议,解析对应的 BeaconItem 中的 bytes,首先创建一个 BeaconParser,传入对应的 BeaconItem,然后根据协议不断读取数据, 如果协议中某个字段占 1 个字节,则调用 readByte,若占用两个字节则调用 readShort,如果要取某个字节的某个 bit 则调用 getBit。// 获取第 1 字节的第 1bit。可以在广播中携带设备的自定义数据,用于设备识别,数据广播,事件通知等,这样手机端无需连接设备就可以获取设备推送的数据。_android蓝牙通信

vue el-input表单验证禁止输入空格_element表单空格校验-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏7次。element ui 中自带的表单必填项校验输入空格时,依然能逃过验证(required: true还是可以通过),需要再 在v-model 加上.trim来禁止输入空格字符。加上之后则不能输入空格。..._element表单空格校验

PYTHON常用库简介_python常用库介绍-程序员宅基地

文章浏览阅读8.3k次,点赞6次,收藏80次。Python科学计算基础库:Numpy,Pandas,Scipy,Matplotlib1.NumPy支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,线性代数,傅里叶变换和随机数功能底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。2.PandasPandas是一个强大的基于Numpy分析结构化数据的工具集;Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Micros_python常用库介绍

Anaconda创建Pytorch虚拟环境(排坑详细)_anaconda创建pytorch环境-程序员宅基地

文章浏览阅读5.9w次,点赞150次,收藏1.4k次。利用conda指令搭建Pytorch环境,并在Pytorch环境中安装GPU版Pytorch相关包。_anaconda创建pytorch环境

Linux: 磁盘状态观察命令lsblk、blkid-程序员宅基地

文章浏览阅读955次,点赞12次,收藏32次。有时我们在磁盘规划前会想要确定一下当前系统的文件系统或磁盘分区情况。这时,就有几个命令可以供选择,通过本文,可以学习这些命令的使用。_lsblk