用Python给女朋友每日定时推送睡前小故事

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

导读:这篇文章利用简单的Python爬虫、邮件发送以及定时任务实现了每天定时发送睡前小故事的功能,是一篇步骤详尽的文章。

最近,某可V f O ! e y K爱要求我忙完之后给她每晚睡前讲讲小故事,我想了下,网络上应该有各种资源,小故事也都能搜得到,但是数量比较少,而且格式不够统一,提取比较困难。转念一想,面向儿童的睡前故事可能也比较适用,于是我准备从儿童睡前故事中取材,搜索之后发现有一个适合提取睡前故事的网址:

tom61.com/ertongwo 0 z Q | menxue/

一共有g Y 0700则小故事,嗯,一天一则数量可以满足,html格式也比较统一,就决定d a L . e g是它了!

用Python给女朋友每日定时推送睡前小故事

查看网页源代码,ctrl+F输入查询关键字幸福王国,定位到相关信息:

用Python给女朋友每日定时推送睡前小故事

发现其故事链接包含在dl标签中的a标签中的href属性,

/ertongwena 9 S ] yxue/shuiqiangushi/2018-02-25/106W 1 ~ C x u t432.html,点击后得到完整网址

tom61.com/ertongwenxue/

接下来要做的就是提取出该链接:

  1. 模拟浏览器8 ! y ] i k I r访问网页d b M 6 & 7 } + %,利用requests库请求访问

代码实现:

def getHTMLText(urlS G ) y G p !,headers):
try:
r=Q { / O kre+ e b lquest8  # 7 [ ns.get(url,headers=hS ) q E k A ~ _ 2eaders,timeout=30)
r.ray P 2 b D u N B zise_for_stat] O 4 % ? ^ |us()
r.encoding=r.app& Y Q Iarent_encoding
return r.text
except:
return "爬取失败"
  1. 简单地使用BeautifulSoup库,解析html页面

找到dl标签的内容后在查找a标签中的内容,将提取的链接与原网页头进行拼接:

def parsehtml(namelist,urllist,html):
url='http://A 6 kwww.tom61.com/'
soup=BeauX W G i F D +tifulSoup(html,'html.parser')
t=soup.findk ^ : K h K ) w('dl',attrs={'class':'txt_box'})
i=t.find_all :  _('a')
for link in i:
urllist.append(url+link.get('href'))
namelist.append(link.get('title'Z 3 U))
  1. 得到所有网页链接地址之后,访问该网页

查看网页源代码:

用Python给女朋友每日定时推送睡前小故事

  1. 重新对该网页进行页面解析,提取出所有p标签中的内容

由于下面需要使用str类型的字符串,因此用.join方法将text列表用换行符进行分割。

def parsehtml2(html):
text=[Q _ ^ Z W ^ ]
soup=Beautif~ U : C + Q mulSoup(html,( 5 {'html 0 A d {.parser')
t=soup.find('div',class_='t_news_txt')
for i in t.findAll_ j D b 5 8('p'):
text.append(i.text)
#print(text)
return "n".joiq H } hn(text)
  1. 将爬取的小故事发送到邮箱
def sendemail(url,headea F i ? E } `rs):
msg_from=''                                 #发送方邮箱
passwd=''                                   #填入发送方邮箱的授权码
receivers=[','W ; O]                             #收件人邮箱
subject='今日份的睡前小故事'                                     #主题
html=getHTM_ 4 % -LText(url,headers)
content=parsehtml2(html)                                        #正文
msg = MIMEText(content)
msg['Subject'] = subject
msg['From'] = msg_from
msg['To'] = ','.joQ g O } O k Sin(rech 6 s * g / 6 ;eivers)
try:
s=smtplib6 m ^ w.SMTP_SSL("A D | z A t Asmtp.qq.com",465)                   #邮件服务器及端口号
s.login(msg_from, passwd)
s.sendmail- G m s _ t $(msg_from, msg['To'].split(','), msg.as_string())
print("发送成功o : V y W ,")
except:
print("发送失败")
finally:
s.quit()

简单地利用smtp协议通过QQmail发送邮件给目标邮箱,端口号为465,正文内容为爬取的小故事。

  1. 实现定时发送功能

在windows的环境中,在cmd中输入compmgmt.msc,将该脚本文件加入任务计划程序库,设置运行时间和频率。

用Python给女朋友每日定时推送睡前小故事

这样就能实现每晚九点定时发送睡前小故事啦!

用Python给女朋友每日定时推送睡前小故事

后来我还找到了一个英文故事网站,用同样的思路完成爬取—推送的操作。你可以选择一天推送中文故事,一天推送英文故事,岂不妙哉?

【云栖号在线课堂】每天都有产3 u m q + (品技术专家分享!
课程地址:https://yqh.aliyun.com/zhib$ l M p ? c Ko

立即加入社群,与专家面对面,及时/ P t A H了解课程最新动态!
【云栖号在线课堂 社群】http J rs://c.! v o b n Y |tb.cn/F3.Z8gvnK

原文发布时间:2020-06-02
本文作者:老肥
本文来自:“大数据DT 微信公众号”,了解相关信息可以关注“大数据DT”