用Python给女朋友每日定时推送睡前小故事
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
导读:这篇文章利用简单的Python爬虫、邮件发送以及定时任务实现了每天定时发送睡前小故事的功能,是一篇步骤详尽的文章。
最近,某可爱要求我忙完之后给她每晚睡前讲讲小故事,我想了下,网络上应该有各种资源,小故事也都能搜得到,但是数量比较少,而且格式不够统一,提取比较困难。转念一想,面向儿童的睡前故事可能也比较适用,于是我准备从儿童睡前故事中取材,搜索之后发现有一个适合提取睡前故事的网址:
tom61.com/ertongwenxue/
一共有700则小故事,嗯,一天一则数量可以满足,html格式也比较统一,就决定是它了!
查看网页源代码,ctrl+F输入查询关键字幸福王国,定位到相关信息:
发现其故事链接包含在dl标签中的a标签中的href属性,
/ertongwenxue/shuiqiangushi/2018-02-25/106432.html,点击后得到完整网址
tom61.com/ertongwenxue/
接下来要做的就是提取出该链接:
- 模拟浏览器访问网页,利用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 "爬取失败"
- 简单地使用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'))
- 得到所有网页链接地址之后,访问该网页
查看网页源代码:
- 重新对该网页进行页面解析,提取出所有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,正文内容为爬取的小故事。
- 实现定时发送功能
在windows的环境中,在cmd中输入compmgmt.msc,将该脚本文件加入任务计划程序库,设置运行时间和频率。
这样就能实现每晚九点定时发送睡前小故事啦!
后来我还找到了一个英文故事网站,用同样的思路完成爬取—推送的操作。你可以选择一天推送中文故事,一天推送英文故事,岂不妙哉?
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-06-02
本文作者:老肥
本文来自:“大数据DT 微信公众号”,了解相关信息可以关注“大数据DT”
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Spring Cloud Alibaba - 重新定义 Java Cloud-Native ,周四直播等你来!
在过去的十年中,互联网在中国得到了快速发展,越来越多的人在日常生活中偏爱在线购物和社交媒体。作为分布式应用程序开发的一站式解决方案,Spring Cloud Alibaba 帮助数以千计的 Internet 和 IoT 企业承载巨大的网络流量并快速构建Cloud-Native 应用程序。 Spring Cloud Alibaba 还是 Spring Cloud 的开源子项目,它基于强大而出色的组件,重新定义了分布式配置管理,自动服务注册和发现,断路器,运行时流量路由,高扩展性以及可视化服务治理。 那为什么 Spring Cloud 会成为 Java 云原生的主流框架? Spring Cloud Alibaba 相较于 Spring Cloud 原生框架具备哪些优势? Spring Cloud Alibaba 是怎么为用户提供一站式的元原生解决方案? 6月4日(周四)14:00 Apache Dubbo PMC 小马哥(马昕曦),讲解《Spring Cloud Alibaba - 重新定义 Java Cloud-Native 》。 欢迎大家钉钉扫描二维码,加入直播群内免费看直播!
-
下一篇
为什么阿里会推荐所有的局部变量使用基本数据类型?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! Java中共有三种变量,分别是类变量、成员变量和局部变量。他们分别存放在JVM的方法区、堆内存和栈内存中。 上面定义的三个变量中: 变量a就是类变量,存放在方法区,线程共享。 变量b就是成员变量,随着对象一起存放在堆内存,线程共享。 变量c和d是局部变量,存放在栈内存,线程独享。 也就是说,变量a和b是共享变量,变量c和d是非共享变量。 即局部变量是非共享变量,作用域只在方法内部,并不会逃逸到方法外。 那么,既然是一个作用域只在方法内的变量,不需要考虑那么多,怎么性能高怎么定义,怎么方便使用怎么定义。 我们都知道在Java语言中,new一个对象是存储在堆里的,我们通过栈中的引用来使用这些对象;所以,对象本身来说是比较消耗资源的。 对于经常用到的类型,如int等,如果我们每次使用这种变量的时候都需要new一个Java对象的话,就会比较笨重。 所以,和C++一样,Java提供了基本数据类型,这种数据的变量不需要使用new创建,他们不会在堆上创建,而是直接在栈内存中存储,因此会更加高效。 【云...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Crontab安装和使用
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- MySQL数据库在高并发下的优化方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Red5直播服务器,属于Java语言的直播服务器






微信收款码
支付宝收款码