齁甜齁甜!用代码给女朋友每日定时推送睡前小故事

作者 | 老肥

来源 | 老肥码码码

这篇文章是去年我在博客上写的一篇基础爬虫,利用了简单的Python爬虫、邮件发送以及定时任务实现了每天定时发送睡前小故事的功能,是一篇步骤详尽的文章。经过测试,该程序仍能正常运行。

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

tom61.com/ertongwenxue/

一共有700则小故事,嗯,一天一则数量可以满足,html格式也比较统一,就决定是它了!

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

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

/ertongwenxue/shuiqiangushi/2018-02-25/106432.html,点击后得到完整网址

tom61.com/ertongwenxue/,接下来要做的就是提取出该链接:

1、模拟浏览器访问网页,利用requests库请求访问

代码实现:

def getHTMLText(url,headers):
    try:
        r=requests.get(url,headers=headers,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text

    except:
        return "爬取失败"

2、简单地使用BeautifulSoup库,解析html页面。

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

def parsehtml(namelist,urllist,html):
    url='http://www.tom61.com/'
    soup=BeautifulSoup(html,'html.parser')
    t=soup.find('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'))

3、得到所有网页链接地址之后,访问该网页。

查看网页源代码:

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

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

def parsehtml2(html):
    text=[]
    soup=BeautifulSoup(html,'html.parser')
    t=soup.find('div',class_='t_news_txt')
    for i in t.findAll('p'):
        text.append(i.text)
    #print(text)
    return "\n".join(text)

将爬取的小故事发送到邮箱

def sendemail(url,headers):

    msg_from=''                                 #发送方邮箱
    passwd=''                                   #填入发送方邮箱的授权码
    receivers=[',']                             #收件人邮箱

    subject='今日份的睡前小故事'                                     #主题
    html=getHTMLText(url,headers)
    content=parsehtml2(html)                                        #正文
    msg = MIMEText(content)
    msg['Subject'] = subject
    msg['From'] = msg_from
    msg['To'] = ','.join(receivers)
    try:
        s=smtplib.SMTP_SSL("smtp.qq.com",465)                   #邮件服务器及端口号
        s.login(msg_from, passwd)
        s.sendmail(msg_from, msg['To'].split(','), msg.as_string())
        print("发送成功")
    except:
        print("发送失败")
    finally:
        s.quit()

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

5、实现定时发送功能

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

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

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

代码传送门:https://github.com/librauee/Reptile/tree/master/story

防疫、复工如何并行?

天云数据推出人工智能监测方案!

到底如何做到事前预防,而不是事后诸葛亮?

本周四晚8点,天云数据VP陈勇为各位揭晓答案!扫描下方二维码免费报名~

热 文 推 荐

刚发布!美国今年要砸8.5亿美元布局AI,这两件事,程序员一定做准备了!

5 亿微博数据疑泄露,Python 爬虫如何避免踩天坑?

自称中本聪的他被法官怒怼:你的证词毫无可信度!

公有云关闭潮或显端倪,企业如何选择?

生产环境使用HBase,你必须知道的最佳实践

64% 的企业未实现智能化,5成公司算法工程师团队规模小于 10人,AI 工程师的机遇在哪里?

你点的每个“在看”,我都认真当成了喜欢

发布了502 篇原创文章 · 获赞 1万+ · 访问量 558万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览