让女朋友感受程序员的浪漫吧!
发送邮件函数,使用SMTP发送邮件:
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
def sendemail(toaddr='目标邮箱@qq.com', message=''):
fromaddr = 'xxx.com' # 你的邮箱
password = 'xxx' # 你的密码
smtp_server = 'smtp.163.com' # smtp地址
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = _format_addr('老公 <%s>' % fromaddr)
msg['To'] = _format_addr('老婆 <%s>' % toaddr)
msg['Subject'] = Header('每日晨间问候', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(fromaddr, password)
server.sendmail(fromaddr, [toaddr], msg.as_string())
server.quit()
return
每日爬取天气和土味情话并发送
# -*- coding: utf-8 -*-
import requests
import random
from bs4 import BeautifulSoup
from datetime import datetime
def getWeather():
# 使用BeautifulSoup获取天气信息
response=requests.get('http://www.weather.com.cn/weather/101190201.shtml')
response.encoding='uft-8'
soup=BeautifulSoup(response.text,'html.parser')
tagToday=soup.find('p', class_="tem")
try:
temperatureHigh=tagToday.span.string
except AttributeError:
temperatureHigh=tagToday.find_next('p', class_="tem").span.string.replace('℃','')
temperatureLow=tagToday.i.string.replace('℃','')
weather=soup.find('p', class_="wea").string
tagWind=soup.find('p',class_="win")
winL=tagWind.i.string
today = datetime.now()
today = str(today.year)+'年'+str(today.month)+'月'+str(today.day)+'日'
content = '早安! 老婆~\n'+\
'今天是: '+today+'\n'+\
'无锡温度: '+temperatureLow+'℃-'+temperatureHigh+'℃\n'+\
'天气: '+weather+'\n'+\
'风级: '+winL
print(content)
return content
def getlloverwords():
# 获取情话
texts = []
for i in range(1,70):
url = 'https://www.duanwenxue.com/huayu/tianyanmiyu/list_{}.html'.format(i)
response = requests.get(url)
texts.append(response.text)
articles = []
for text in texts:
soup = BeautifulSoup(text,'lxml')
arttis = soup.find('div', class_='list-short-article').find_all('a', {'target': "_blank"}) # 寻找情话内容
# 通过列表推导式以及for循环获取到每个a标签里面的text内容并通过strip去除空格
articles.extend([arttis[i].text.strip() for i in range(len(arttis))])
todaywords = articles[random.randint(0, len(articles)-1)] # 随机选取其中一条情话
return todaywords
def dailymorning():
message = getWeather()+'\n'+\
'今日份的土味情话:\n'+\
getlloverwords()
dailyemail.sendemail(toaddr='目标邮箱@qq.com', message=message)
if __name__ == '__main__':
dailymorning()
定时任务设置
参考:https://www.cnblogs.com/zz0eyu/p/9584000.html
这是windows自带的功能,自认为还是比较强大的。
请返回桌面,在我的电脑上右键选择管理(Manage) -> System Tools -> Task Scheduler,在右侧选择Create Basic Task
这时会弹出一个新的窗口:
- 输入任务名,下一步
- 之后会让你选择任务的执行周期,这里选在Daily,然后选择开始时间,Recur every这里填写1天,下一步
- 这里要选择任务执行的动作,这里为了执行python脚本,选择start a program,下一步
- 接下来就要选择执行的程序了,这里需要特别注意:
- Program/script: Browse...这里选择pythonw.exe这个程序(后面会说明为什么不选择python.exe)。因为我的电脑里同时安装了python2和python3,所以我的最终路径是这样的C:\Users\YJChan\AppData\Local\Programs\Python\Python36\pythonw.exe
- Add arguments这里填写你的脚本路径:E:\Entertainment\Audios\by\autosend.py
- Start in保持空白即可
任务创建完成,设置为每天一次就可
效果: