zoukankan      html  css  js  c++  java
  • 用Python写个爬虫小程序,给女朋友每日定时推送睡前小故事

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

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

    http://www.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 "
    ".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,将该脚本文件加入任务计划程序库,设置运行时间和频率。

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

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

    当然本文只是提供一个想法,你可以基于这个思路实现更多有意思的案例,本文的源码可按下方的提示获取!

    本文提到的源码可以在微信公众号”智阅荟“回复202010191下载:

    最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    欢迎关注公众号:「智阅荟」,懂技术,更懂你!

    ↑关注上方公众号回复 202010191 即可下载↑

    说明:本站提供的所有软件已经过360、火绒安全检测,在使用中如有问题可在公众号留言!

  • 相关阅读:
    进程通信之信号通信
    分数化小数
    台湾大学公开课《概率》第五周一道不会作的作业题 ,一种看不懂的解法
    网络子系统53_ip协议分片重组_内存阈值
    Centos 6.3 Realtek Audio Driver Compile
    I.MX6 PHY fixup 调用流程 hacking
    I.MX6 AR8031 寄存器操作
    I.MX6 ethtool 移植
    I.MX6 U-Boot ping网络
    Android tcpdump 使用
  • 原文地址:https://www.cnblogs.com/hbqjzx/p/13843160.html
Copyright © 2011-2022 走看看