Ubuntu16.04環境。。。
定時任務,顧名思義,固定時間進行的任務。在Ubuntu中,可以使用crontab來設置定時任務。
crontab -l # 查看當前定時任務列表
crontab -e # 編輯定時任務
crontab -r # 清空定時任務。
先來一個簡單的, 每隔一分鐘將當前時間追加到一個文件中。
注意權限問題,當用戶並非root用戶時。只有在用戶自己目錄下創建文件之類不需要提升權限。 就是 sudo …
創建定時任務。初次輸入此命令會讓你選擇編輯方式,自己看着選就好。如果不滿意輸入命令可以更換 select-editor
crontab -e
會啓動一個文件,我們將定時任務在文件中編輯進去就好,由於是一個簡單的定時任務,也就不需要創建shell腳本了。。。
*/1 * * * * date >> /home/frng/tmp/mydate
每隔一分鐘將當前時間追加到 /home/frng/tmp/mydate文件中。
前五個佔位符分別代表
- 每小時的多少分鐘
- 每天的多少小時
- 每個月的多少天
- 每年的多少月
- 每週的第幾天
*/n 表示 每隔n段時間
, 表示不連續的幾個時間
- 表示連續的時間
如
* 1,3 * * * 表示每天的1 點3點執行, 也就是 1, 3
* 1-3 * * * 表示每天1-3點執行,也就是 1, 2, 3
*/10 2 * * * 表示每天兩點時每隔10分鐘執行一次
創建完成保存後可以 crontab -l
查看當前任務。
然後找到保存時間信息的文件,查看,可以發現每隔一分鐘就會向其中追加一段信息
定時任務,就是這樣。而所謂使用python發送郵件就是定期執行一個.py腳本。這個腳本可以發送郵件。可以每天向自己發送一個笑話之類。。如果有網絡服務器一直運行的話。
獲取笑話的爬蟲文件。可以通過get_content()方法得到一個笑話。笑話網址,如有侵權博客立刪。
http://xiaohua.zol.com.cn/new/
import requests
from bs4 import BeautifulSoup
baseurl = 'http://xiaohua.zol.com.cn'
# 詳情頁解析
def parse_detail(url):
resp = requests.get(url)
soup = BeautifulSoup(resp.text, features='lxml')
content = soup.find_all('div', attrs={"class": "article-text"})[0].text.strip()
return content
# 從主頁獲取詳情頁鏈接 mainurl = 'http://xiaohua.zol.com.cn/new/'
def get_detail_urls():
mainurl = 'http://xiaohua.zol.com.cn/new/'
resp = requests.get(url=mainurl)
soup = BeautifulSoup(resp.text, features="lxml")
aTagList = soup.find_all(name='a',text='查看全文»')[1:3] # 只查看第二第三個
return [baseurl+aTag.get("href") for aTag in aTagList]
def get_content():
msg_html = ''
urlList = get_detail_urls()
for url in urlList:
content = parse_detail(url)
msg_html += content
return msg_html
if __name__ == '__main__':
# parse_detail('http://xiaohua.zol.com.cn/detail60/59427.html')
# get_detail_urls()
msg_content = get_content()
print(msg_content)
郵件發送的py文件
import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from requetsAndBs4 import get_content
mailHost = 'smtp.163.com'
mailPort = 994
user = '[email protected]'
password = os.environ.get("mail163pass")
def send_mail():
receiver = ['*****@qq.com', '*****@qq.com'] # 收件人郵箱列表
smtp = smtplib.SMTP_SSL(mailHost, mailPort)
smtp.login(user=user, password=password)
msg = MIMEMultipart()
msg['Subject'] = Header("每日笑話", 'utf-8')
msg['from'] = user
msg['to'] = ','.join(receiver)
content = get_content()
msg_content = MIMEText(content, 'plain', 'utf-8')
msg.attach(msg_content)
smtp.sendmail(user, receiver, msg.as_string())
if __name__ == '__main__':
send_mail()
將這兩個文件 放在同一目錄下。。。不然郵件發送時找不到requetsAndBs4模塊。
實驗一下不用定時任務是否可以成功發送。調用.py文件 使用
**python 文件名
**即可
**注:python的包中一定要安裝有使用到的模塊。比如lxml, bs4等。。。安裝命令pip install … **
執行如果成功 就可以創建定時任務了
/home/frng/.local/virtualenvs/py3.5_spilder/bin/python /home/frng/PycharmProjects/spiderTest/sendMail.py
爲什麼我的這麼長呢,因爲使用了虛擬環境,前一個時虛擬環境的python所在的目錄。後一個時發送郵件的.py文件所在的目錄。。。注:最好注意一下權限問題。看當前用戶是否可讀可寫可執行
成功了的話 繼續下一步。這次創建一個shell腳本(並不是)。只是創建了一個.sh文件並沒有使用shell語法。找一個目錄創建sendMail.sh文件最好是當前用戶目錄下。
vim sendMail.sh
將/home/frng/.local/virtualenvs/py3.5_spilder/bin/python /home/frng/PycharmProjects/spiderTest/sendMail.py
這句命令加上去即可。
添加完成查看一下該文件權限ls -l
確保當前用戶可以執行。。。
如果不可以的話添加執行權限。。
sudo chmod 777 sendMail.sh
這樣一了百了,爲所有用戶添加了讀寫執行的權限。
最後一步。編輯定時任務 crontab -e
在最後加上任務
*/1 * * * * 可執行.sh文件的絕對路徑
表示每個一分鐘執行一次.sh文件 .sh文件可以發送郵件
我的路徑是是
*/1 * * * * /home/frng/mycrontab/sendMail.sh
如果隔了一分鐘收到了郵件 萬事大吉。如果沒收到,檢查檢查吧。最後測試收到郵件後把定時任務改了吧。。。一分鐘一封太恐怖了。。。