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保持空白即可

任務創建完成,設置爲每天一次就可

效果:

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