专栏首页早起Python用Python写个爬虫小程序,给女朋友每日定时推送睡前小故事

用Python写个爬虫小程序,给女朋友每日定时推送睡前小故事

导读:这篇文章利用简单的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)

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

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,正文内容为爬取的小故事。

6. 实现定时发送功能

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

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

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

当然本文只是提供一个想法,你可以基于这个思路实现更多有意思的案例,本文的源码可以在后台回复「故事」获取!

本文分享自微信公众号 - 早起Python(zaoqi-python)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 童年的游戏,Python一行代码就能玩

    大家好,儿童节就要来了,虽然秃头程序员没有头发,但是童心还是一直都在的,今天就分享一个私藏的GitHub项目——free-python-games,一行代码就能...

    刘早起
  • 我用Python展示Excel中常用的20个操

    Excel与Python都是数据分析中常用的工具,本文将使用动态图(Excel)+代码(Python)的方式来演示这两种工具是如何实现数据的读取、生成、计算、修...

    刘早起
  • 词云图的几种制作方法评测,你pick哪款

    大家好,不知道大家会在什么场合使用词云图,对我来说词云图的优点除了它可以展示大量文本数据。从而让读者快速抓住重点,更重要的是词云图好看啊

    刘早起
  • 给女朋友每日定时推送睡前小故事

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

    老肥码码码
  • Flask模板中可以直接访问的特殊变量和方法

    就是 Flask 中表示当前请求的 request 对象,request对象中保存了一次HTTP请求的一切信息。

    Devops海洋的渔夫
  • Python3多进程+协程异步爬取小说

    之前写了一篇关于用多线程爬小说的博客,但是发现爬取16M的小说需要十几分钟,所以今天更新了一篇用多进程外加使用单线程异步的协程同样爬取之前用多线程爬取的同一篇小...

    HcodeBlogger
  • swagger报错This application has no explicit mapping for /

    是因为swagger-ui.html 是在springfox-swagger-ui.jar里的,因为修改了路径Spring Boot不会自动把/swagger-...

    似水的流年
  • JSP学习心路

    1.先安装JDK,在安装开发工具(MyEclipse、Eclipse或Netbeans)和tomcat,其中MyEclipse内置tomcat服务器;

    Dabelv
  • 用python爬虫简单网站却有 “多重思路”--猫眼电影

    这些函数库没有的话 就自己下载一下, 下载慢出现timeout的话,需要搭配一下国内镜像网站。百度一下 清华镜像

    孤独的明月
  • flask第33篇——加载静态文件

    静态文件主要包括css,JavaScript等脚本文件、图片等,在加载文件的时候主要是用url_for方法。

    用户2149234

扫码关注云+社区

领取腾讯云代金券