用Python定时执行一个程序,并且完成了一个每日爬取天气并把结果发送到邮箱的程序。
import requests import smtplib import schedule import time from bs4 import BeautifulSoup from email.mime.text import MIMEText from email.header import Header account = input('请输入你的邮箱:') password = input('请输入你的密码:') receiver = input('请输入收件人的邮箱:') def weather_spider(): headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'} url='http://www.weather.com.cn/weather/101210101.shtml' res=requests.get(url,headers=headers) res.encoding='utf-8' soup=BeautifulSoup(res.text,'html.parser') tem1= soup.find(class_='tem') weather1= soup.find(class_='wea') tem=tem1.text weather=weather1.text return tem,weather def send_email(tem,weather): global account,password,receiver mailhost='smtp.qq.com' qqmail = smtplib.SMTP() qqmail.connect(mailhost,25) qqmail.login(account,password) content= tem+weather message = MIMEText(content, 'plain', 'utf-8') subject = '今日天气预报' message['Subject'] = Header(subject, 'utf-8') try: qqmail.sendmail(account, receiver, message.as_string()) print ('邮件发送成功') except: print ('邮件发送失败') qqmail.quit() def job(): print('开始一次任务') tem,weather = weather_spider() send_email(tem,weather) print('任务完成') schedule.every().day.at("07:30").do(job) schedule.every(5).minutes.do(job) while True: schedule.run_pending() #运行所有可以运行的任务,如果无法运行则停止 time.sleep(1)schedule库的使用详解:
schedule.every(10).minutes.do(job) #部署每10分钟执行一次job()函数的任务 schedule.every().hour.do(job) #部署每×小时执行一次job()函数的任务 schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务 schedule.every().monday.do(job) #部署每个星期一执行job()函数的任务 schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务