Python 爬虫实战(一) 每天早晨为女朋友发送天气和土味情话邮件

让女朋友感受程序员的浪漫吧!

发送邮件函数,使用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

这时会弹出一个新的窗口:

  1. 输入任务名,下一步
  2. 之后会让你选择任务的执行周期,这里选在Daily,然后选择开始时间,Recur every这里填写1天,下一步
  3. 这里要选择任务执行的动作,这里为了执行python脚本,选择start a program,下一步
  4. 接下来就要选择执行的程序了,这里需要特别注意:
    1. Program/script: Browse...这里选择pythonw.exe这个程序(后面会说明为什么不选择python.exe)。因为我的电脑里同时安装了python2和python3,所以我的最终路径是这样的C:\Users\YJChan\AppData\Local\Programs\Python\Python36\pythonw.exe 
    2. Add arguments这里填写你的脚本路径:E:\Entertainment\Audios\by\autosend.py
    3. Start in保持空白即可

任务创建完成,设置为每天一次就可

效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章