上一篇写了给女朋友推送天气的,但是未免太单调,来个推送睡前小故事

这次用的是这个网站http://www.tom61.com/ertongwenxue/shuiqiangushi/index_2.html,这个网站需要用一丢丢爬虫知识
首先,得到列表页所有故事的url,还有长度,也就是多少个故事

def get_list():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36',}links = []for page in range(2,11):url='http://www.tom61.com/ertongwenxue/shuiqiangushi/index_{}.html'.format(str(page))rq=requests.get(url,headers=headers)print(url)print('*'*50)rq.encoding='utf8'data=rq.textsoup=BeautifulSoup(data,'lxml')con_list=soup.find('dl',class_='txt_box').findAll('dd')for x in con_list:link_s=x.find('a')['href']link='http://www.tom61.com'+link_slinks.append(link)len_links=len(links)print(len_links)return links,len_links

接下来是获取故事内容了,说下思路。首先我们不能发送重复的故事,这样的想解决的话,可以这样,发送一个故事,就把他的url存起来,下次运行先检查是否发送过了,我代码里的两个with open就是干这事的。
然后我们用了while循环,直到发送成功,return退出循环。然而我取得是第二页到第十页的故事,总有发完的时候,到时候一时不查,它一直循环也占资源不是,而且想着也觉得累。所以这时候那个len_links(故事个数)就派上用场了,循环所有故事总个数的次数,因为我用的random随机取,循环这么多次虽然不能肯定就没故事可发了,但是估计也没剩多少了。这时候让它break就行了,你女朋友跟你说昨天没给她发故事,到时候改下代码,跑第十一页往后的就行了

def get_massage(urls,len_links):num=0while True:num+=1if num==len_links:print('没资源了')breakwith open("gushi_url.txt", "r+", encoding="utf-8") as f:content = f.read()url_list = content[:-1].split(',')link=random.choice(urls)if link not in url_list:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36',}rq = requests.get(link, headers=headers)print(link)rq.encoding = 'utf8'data = rq.textsoup = BeautifulSoup(data, 'lxml')title=soup.find('div',class_='t_news').find('h1').get_text()print(title)content=soup.find('div',class_='t_news_txt').get_text()email_s(title,content)with open("gushi_url.txt", "a+", encoding="utf-8") as f:f.write(link + ",")return False

接下来就是发送邮件了,这里不详细写了,上一篇推送天气已经写了

def email_s(title,content):# 输入Email地址和口令:from_addr = 。。@126.com'password = '。。'# 输入收件人地址:to_addr = '。。。。@qq.com'# 输入SMTP服务器地址:smtp_server = 'smtp.126.com'msg = MIMEText('宝贝儿,睡前小故事来喽。\n{}\n{}\n今天的故事讲完啦宝贝儿,快睡吧,晚安,开心每一天哦!'.format(str(title),str(content)), 'plain', 'utf-8')msg['From'] = Header('来自在乎你的人的问候', 'utf-8')msg['To'] = to_addrmsg['Subject'] = Header('今天的故事是:'+title, 'utf-8')server = smtplib.SMTP(smtp_server, 25)  # SMTP协议默认端口是25server.set_debuglevel(1)server.login(from_addr, password)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()

建立job函数作为启动函数

def job():urls, len_links = get_list()get_massage(urls, len_links)

最后,完整代码在这

import requests
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import random
import time
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
def get_list():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36',}links = []for page in range(2,11):url='http://www.tom61.com/ertongwenxue/shuiqiangushi/index_{}.html'.format(str(page))rq=requests.get(url,headers=headers)print(url)print('*'*50)rq.encoding='utf8'data=rq.textsoup=BeautifulSoup(data,'lxml')con_list=soup.find('dl',class_='txt_box').findAll('dd')for x in con_list:link_s=x.find('a')['href']link='http://www.tom61.com'+link_slinks.append(link)len_links=len(links)print(len_links)return links,len_linksdef get_massage(urls,len_links):num=0while True:num+=1if num==len_links:print('没资源了')breakwith open("gushi_url.txt", "r+", encoding="utf-8") as f:content = f.read()url_list = content[:-1].split(',')link=random.choice(urls)if link not in url_list:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36',}rq = requests.get(link, headers=headers)print(link)rq.encoding = 'utf8'data = rq.textsoup = BeautifulSoup(data, 'lxml')title=soup.find('div',class_='t_news').find('h1').get_text()print(title)content=soup.find('div',class_='t_news_txt').get_text()# email_s(title,content)with open("gushi_url.txt", "a+", encoding="utf-8") as f:f.write(link + ",")return False
def email_s(title,content):# 输入Email地址和口令:from_addr = 。。@126.com'password = '。。'# 输入收件人地址:to_addr = '。。。。@qq.com'# 输入SMTP服务器地址:smtp_server = 'smtp.126.com'msg = MIMEText('宝贝儿,睡前小故事来喽。\n{}\n{}\n今天的故事讲完啦宝贝儿,快睡吧,晚安,开心每一天哦!'.format(str(title),str(content)), 'plain', 'utf-8')msg['From'] = Header('来自在乎你的人的问候', 'utf-8')msg['To'] = to_addrmsg['Subject'] = Header('今天的故事是:'+title, 'utf-8')server = smtplib.SMTP(smtp_server, 25)  # SMTP协议默认端口是25server.set_debuglevel(1)server.login(from_addr, password)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()
def job():urls, len_links = get_list()get_massage(urls, len_links)
if __name__=='__main__':# job()#定时任务,每天23:30运行程序,想设置其他运行时间的可以看我的另一篇博客scheduler = BlockingScheduler()scheduler.add_job(job, 'cron', hour=23, minute=30)scheduler.start()

到此,程序就完成了,欢迎提问。
最后老规矩,看一下运行效果吧

给女朋友推送睡前小故事相关推荐

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

    导读:这篇文章利用简单的Python爬虫.邮件发送以及定时任务实现了每天定时发送睡前小故事的功能,是一篇步骤详尽的文章. 最近,某可爱要求我忙完之后给她每晚睡前讲讲小故事,我想了下,网络上应该有各种资 ...

  2. python 提取网页正文_用Python写个爬虫小程序,给女朋友每日定时推送睡前小故事...

    ↑ 关注 + 星标 ,每天学Python新技能后台回复[大礼包]送你Python自学大礼 导读:这篇文章利用简单的Python爬虫.邮件发送以及定时任务实现了每天定时发送睡前小故事的功能,是一篇步骤详 ...

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

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

  4. 教你用Python 每日定时推送睡前小故事给你__的人

    本文利用了简单的Python爬虫.邮件发送以及定时任务实现了每天 定时发送睡前小故事 的功能,是一篇步骤详尽的文章. 经过测试,该 程序仍能正常运行 . 最近,某可爱要求我忙完之后给她每晚睡前讲讲小故 ...

  5. 每天定时给你的女朋友发送睡前小故事其二

    我们在文章<每天定时给你的女朋友发送睡前小故事其一>中说了如何爬取故事并且发送,并且已经达到目的了,那么我们如何在我们的windows上设置定时任务,每天按时的执行我们的代码呢?接下来听我 ...

  6. 睡前小故事之Html

    睡前小故事之Html HTML的英文全称是 Hypertext Marked Language,即超文本标记语言.HTML是由Web的发明者 Tim Berners-Lee和同事 Daniel W. ...

  7. 睡前小故事之MySQL起源

    睡前小故事之MySQL起源 MySQL起源 作者介绍 整理来自网络 MySQL起源 MySQL的海豚标志的名字叫"sakila",它是由MySQLAB的创始人Monty从用户在&q ...

  8. CSDN日报190318:简单爬虫:给女友定时发送睡前小故事

    程序人生 | 简单爬虫:给女友定时发送睡前小故事 作者:librauee 最近,某可爱要求我忙完之后给她每晚睡前讲讲小故事,我想了下,网络上应该有各种资源,小故事也都能搜得到,但是数量比较少,而且格式 ...

  9. 听故事--114个儿童睡前小故事(全文+在线听)

    单击就可听,并有全文.1一只丑小鸭的悲剧2一只小老鼠3一根了不起的木棍4七十二变5两只尾巴打结的老鼠6买鞭炮7会唱歌的秘密8会学猫叫的小老鼠9会打鸣儿的大老虎10会说话的卷心菜11候补队员12公主的猫 ...

最新文章

  1. 怎样才算熟悉python-终于找到python怎么才算入门
  2. down 网卡端口周期性的up_down 网卡端口周期性的up_思科交换机端口down或up故障原因...
  3. 别让不好意思害了你 。
  4. CodeForces - 1270D Strange Device(思维+构造)
  5. PHP 入门 - 9.安全
  6. Pytorch cifar10离线加载二进制文件
  7. php url传递参数_互联网系统(APP、网站等)通信基石——会话(PHP版)
  8. 关于Golang的4个小秘密
  9. linux物理硬盘和sd的对应关系_Linux物理存储结构以及磁盘划分
  10. jquery 查找表格里的input_jquery获取input表单值的代码
  11. java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...
  12. linux设置ip批处理文件,一篇详细的修改ip的方法
  13. 男生学计算机怎么样,男生学计算机专业好不好?
  14. java 设置excel颜色_Java 设置Excel图表背景填充(颜色、图片填充)
  15. 2020安洵杯参赛感言
  16. 创建一个简单OIO模式的socket服务端
  17. 如何将MAC设成wifi热点
  18. amlogic logo amlogic rk tvbox 电视盒 定制化开发(一) 开机logo 定制
  19. tplink怎么进去_如何进入tp-link无线路由器设置界面
  20. 台式计算机选购,电脑什么配置好 教你如何选购一台好的台式电脑

热门文章

  1. 内核 网络流行语_HTML5作为流行语
  2. 【机器学习】逻辑回归-基础认识与鸢尾花分类实操案例
  3. android获取ip方法,Android开发准确获取手机IP地址的两种方式
  4. CESM2.1.3移植 XML文件的填写
  5. 如何从数据库中筛选出达成指定里程碑节点的项目_公测首发 | 支持API的连接型智能多维表格,「vika维格表」如何让数字化真正成为生产力?...
  6. jQuery箭头切换图片 - 学习笔记
  7. Arduino学习之震动开关
  8. FairyGUI 生成模板修改
  9. [ C语言 ]指针---结构体(struct)---分支语句(1)---初识C语言末尾
  10. 高绩效教练收获_高绩效呼叫中心怎样诞生的?