手把手教你用Python网络爬虫+自动化来创建一位属于你自己的虚拟女票(附源码)

2021/08/14 10:00
阅读数 64
点击上方“ Python爬虫与数据挖掘 ”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

为学应须毕生力,攀高贵在少年时。

大家好,我是白小纯。

前言

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

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

啊,冰冰真好看。这里给大家介绍下冰冰女神:王冰冰,出生于吉林省长春市,中国内地女记者。

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

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

想要和冰冰说上一些悄悄话吗?

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

那么就和我一起来吧!

这篇文章主要分为四个部分进行展开:

一、爬取冰冰动图二、自动生成表白话语三、冰冰回信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)

二、自动生成表白话语

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

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

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

接下来要进入重点了,你给冰冰说话了,还要让冰冰给你回复,那如何来实现呢?


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


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


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

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

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 BeautifulSoupimport randomimport requestsfrom smtplib import SMTP_SSLimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Headerfrom 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网络爬虫,抓取了王冰冰靓女的动图图片,之后利用网络爬虫技术获取了文学诗篇网站的表白桥段,通过青云客平台,打造了一款智能机器人模拟冰冰回信,并且基于邮箱服务器,模拟冰冰向自己发送新邮件,每天打开邮箱,都可以收到女神的邮箱,心情美滋滋~如此有趣的项目,快快来尝试吧!

送书

本周赠书:《吃透Ansible:核心源码剖析与项目实战

作者在Ansible领域深耕多年,有丰富的Ansible使用经验,并对其原理有深入的理解。本书不仅深入剖析Ansible的源码,而且对其底层通信和整体框架做了深入解析,讲解既有广度也有深度。本书语言简练,内容通俗易懂,是学习和研究Ansible的不二之选。书中对Ansible源码的关键部分做了详细讲解,并对不同版本的Ansible源码做了比对分析,而且还结合实际项目进行深度优化,让读者能更好地理解和使用Ansible。本书是一本用心之作,很适合Python初中级软件工程师和运维工程师阅读。


活动规则


参与方式:在下方公众号后台回复 “送书”关键字,记得是送书二字哈,即可参与本次的送书活动。

公布时间:2021年8月18号(周三)晚上20点

领取事宜:请小伙伴添加小助手微信: pycharm1314,或者扫码添加好友。添加小助手的每一个人都可以领取一份Python学习资料,更重要的是方便联系。

注意事项一定要留意微信消息,如果你是幸运儿就尽快在小程序中填写收货地址、书籍信息。一天之内没有填写收货信息,送书名额就转给其他人了噢,欢迎参与。

------------------- End -------------------

往期精彩文章推荐:

本文分享自微信公众号 - IT共享之家(info-share)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部