神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

很多小夥伴找我問:老鐵,這些代碼我寫的和你一樣,為什麼我的不行。其實這是最基本的函數,你照葫蘆畫瓢是沒什麼多大的作用的。我不會直接告訴你答案也不是我不想告訴你,而是希望你能跟著思路,自己找到答案,這才是真的學會了,掌握了這其中的知識點,下次在遇到就會了,而不是到處去問。如果你還在迷茫,不知道該往哪個方向走,如果你還找不到Python的入門,如果你還在為碰到各種知識點不會而苦惱,那就加小編自己弄的一個交流學習基地吧。大家可以加入交流基地:58937142,裡面新手入門資料,可以說從零到項目實戰,都是可以免費獲取的,還有熱心腸的答疑小夥伴為各位免費解答問題,熱心腸的小夥伴也是蠻多的。不失為是一個交流的的好地方,小編在這裡邀請大家加入我的大家庭。歡迎你的到來。一起交流學習!共同進步!小編等你!

前言

開心做技術

在深入感受到爬蟲的樂趣的時候,多想用它乾點簡單的事情,我非常喜歡瀏覽某網站的熱點新聞,但如果那天學習忙的天花亂綴(chu qu gui hun)的時候,“WC、WC、我錯過了什麼大事情”,就會錯過當時的熱點。怎麼才能記錄下呢!

預期達成效果:

python爬去某網站上的時刻下最熱點新聞,存儲到文檔中。在lunix下定時每隔n小時啟用python去爬取新聞,然後用郵件的形式每隔n小時將新聞文檔發到自己的郵箱,以便朕統一的查閱。

執行計劃:

  1. 定時執行任務配置【Ubuntu環境下】

  2. 發送郵件相關配置

  3. 執行腳本編寫

  4. python爬蟲程序編寫

注:一千個人心中有一千個哈姆雷特,一千個人配出一千種錯誤

1、定時執行任務

在ubuntu相愛使用crontab部署定時任務{使用是linux虛擬機ubuntu。}

cron是一個[守護程序]用於在指定的時間內執行行程類的任務,每一個用戶都有一個 crontab 文件,來允許他們指定需要執行的內容和時間,此外,系統也有一個 crontab ,用來允許像交替日誌和更新本地數據這樣有規則的任務。

插入crontab所需要的知識,只需要看看,瞭解下後面不明白再來看

服務使用命令:

查看cron的狀態

sudo service cron status 

開啟cron

sudo /etc/init.d/cron start

關閉cron

sudo /etc/init.d/cron stop

重啟cron

sudo service cron restart

or重啟服務

sudo /etc/init.d/cron restart

查看命令是否運行

pgrep cron

cron設置用法:

crontab -e #設置定時任務crontab -l #查看詳情crontab -r : 刪除 crontab 文件 不建議手賤去驗證他

定時任務的模版樣式:

* * * * * command 星星表示通配符 command表示任務

m h dom mon dow command

分 時 日 月 周 命令

m 分鐘 0-59第1列表示分鐘1~59 每分鐘用*或者 */1表示

h 小時 0-23 第2列表示小時1~23(0表示0點)

dow 天1-31 第3列表示日期1~31

mon 月 1-12 第4列表示月份1~12

dow 星期 1-6 0表示星期日第5列標識號星期0~6(0表示星期天)

command 就是要執行的命令 第6列要運行的命令

記住幾個特殊符號的含義:

“*”代表取值範圍內的數字,

“/”代表”每”,

“-”代表從某個數字到某個數字,

“,”分開幾個離散的數字

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每晚的21:30重啟apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每月1、10、22日的4 : 45重啟apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每週六、週日的1 : 10重啟apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啟apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每星期六的11 : 00 pm重啟apache。

0 */1 * * * /usr/local/etc/rc.d/lighttpd restart

每一小時重啟apache

0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

晚上11點到早上7點之間,每隔一小時重啟apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

每月的4號與每週一到週三的11點重啟apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart

一月一號的4點重啟apac

每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行文件

50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts參數表示,執行後面目錄中的所有可執行文件。 ]

每天早上6點

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。

每兩個小時(第一個為15,指明沒兩個小時的第15min中執行一次)

15 */2 * * * echo "Have a break now." >> /tmp/test.txt

晚上11點到早上8點之間每兩個小時和早上八點

0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點

0 11 4 * 1-3 command line

每月(1號凌晨4:42)去執行/etc/cron.monthly內的腳本

42 4 1 * * root run-parts /etc/cron.monthly

注意: "run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名。

每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。

5,15,25,35,45,55 16,17,18 * * * command

每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令,並把結果添加在mm.txt這個文件之後(mm.txt文件位於用戶自己的目錄位置)。

12,553 4-91,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt (頭大)

自己測試小實驗,瞭解他的大概流程與原理:

root123456@ubuntu:~$ crontab –e

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

使用vi編譯器,第一次使用Ubuntu它會讓你選著編譯器,不要相信他的箭頭(easies?)用了老半天就他最費勁 ,還是選擇vi,別問為什麼, 順 手!

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

在裡面最下面鍵入:測試代碼

同時在目錄下創建/tmp/1.txt

*/1 * * * * date >> /tmp/1.txt

意思是每一分鐘將當時的數據打印到/tmp/1.txt中

然後esc –》:wq退出

保存之後重啟服務

root123456@ubuntu:~$ sudo service cron restart

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

查看結果

root123456@ubuntu:~$ cat /tmp/1.txt

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

每分鐘去打印一次時間到1.txt上

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

定時執行任務這步就可以確定定時可以使用了額,上面的配置是測試定時任務,認識到定時啟動任務是什麼形式的,還可以去找其他的例子,變換時間 和執行的命令自己做測試。

這步驟是為了後面做鋪墊,是後面的基礎,就先在這提前介紹了。因為後面很“激情”來不及詳細補充定時功能。

2、發送郵件相關配置

我認為重點和難點就是郵件的發送

自動發送郵件,使用命令行的方式發送郵件。先來陪著兩個郵件服務mutt msmtp

在ubuntu下安裝mutt很方便,只需要sudo apt-get install mutt

sudo apt-get install mutt

另外需要安裝msmtp,一個發郵件的小工具,sudo apt-get insall msmtp。

sudo apt-get insall msmtp

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

在安裝的過程中會出現package configuration,這時候發現無發選到ok

按住Tab點亮ok 然後按住Enter鍵,接下來一頓默認猛如虎的操作(就乖乖的選默認)

假裝有圖(安過後就忘了截圖嚕!)

配置Muttrc

打開文件,路徑/etc/Muttrc

set sendmail="/usr/bin/msmtp" set use_from=yes

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

配置msmtp

msmtp默認沒有,所以在/etc路徑下創建msmtprc配置文件

我本想用日誌文件做測試,創建/var/log/msmtp.log,如果發生錯誤的話,能檢測到原因

打開msmtprc文件配置下面的內容

account default host smtp.163.com 不要動from [email protected] 你的郵箱

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

這個設置權限步驟,只要你膽子大就不用(我是沒改,太難了)

由於我們的密碼是明文,所以要稍稍的修改下權限(哈哈,你看不到我的pw,你看不到)

chmod 600 msmtprc

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

現在基本配置完成了,使用命令行輸出測試一波

我把以my_first_test為主題,test為內容的郵件發送到另一個我的郵箱

echo "test" |mutt -s "my_first_test" [email protected]

哈哈,成功

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

到這裡郵箱配置的環境可以了,現在只能只能用命令行發送郵件。如何做到自動發送,且向下see

常見的報錯,搜一下一大推解決方案,奔潰邊緣就重新配置,從0開始!

mutt的常用命令

mutt [-hnpRvxz][-a<文件>][-b<地址>][-c<地址>][-f<郵件文件>][-F<配置文件>][-H<郵件草稿>][-i<文件>][-m<類型>][-s<主題>][郵件地址]

Linux命令參數:

-a<文件 在郵件中加上附加文件。

-b<地址 指定密件副本的收信人地址。

-c<地址 指定副本的收信人地址。

-f<郵件文件 指定要載入的郵件文件。

-F<配置文件 指定mutt程序的設置文件,而不讀取預設的.muttrc文件。

-h 顯示幫助。

-H<郵件草稿> 將指定的郵件草稿送出

-i<文件 將指定文件插入郵件內文中

-m<類型 指定預設的郵件信箱類型。

-n 不要去讀取程序培植文件(/etc/Muttrc)

-p 在mutt中編輯完郵件後,而不想將郵件立即送出,可將該郵件暫緩寄出。

-R 以只讀的方式開啟郵件文件

-s<主題 指定郵件的主題。

-v 顯示mutt的版本信息以及當初編譯此文件時所給予的參數。

-x 模擬mailx的編輯方式。

-z 與-f參數一併使用時,若郵件文件中沒有郵件即不啟動mutt。

舉個橘子:

mutt -s "subject" -a /home/admin/backup.tar.gz < /tmp/x.txt

-s: 郵件標題,用""括上

-a: 郵件附件。如上命令就是將/backup目錄下 backup.tar.gz文件作為附件發送。

< /tmp/x.txt:/tmp目錄下x.txt文件裡的內容作為郵件內容發送。

給多人發送郵件,只要在郵箱地址後加空格接著輸入郵箱地址即可,如:

mutt -s "subject" -a /home/admin/backup.tar.gz < /tmp/x.txt

網易163郵箱獲取授權碼

163免費郵箱可以直接要網頁上進行收發郵件,,如果在客戶端上收發郵件必須使用授權碼才能夠使用

授權碼163郵箱的一個安全機制

登錄163郵箱,在設置裡面

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

查看,應該是沒開啟的狀態,我的開啟了

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

點擊開啟,手機驗證,輸入的密碼就是上面配置中輸入的密碼

同時開通POP3/SMTP/IMTP郵件收發服務,你的手機郵件都會記錄下這個密碼的。

在測試的時候出現錯誤:不要怕,去翻譯去百度(我就是這麼煎熬的過來的)

3、執行腳本編寫

前面的的步驟成在Ubuntu上配置,下面就讓發送郵件和定時功能結合起來,編寫.sh小腳本

在tmp下創建emil文件夾

測試小實驗:

在裡面創建a.sh文件,輸入

echo "aaaaaaaaaa" | mutt -s "this is title" [email protected]

郵箱是要發到的郵箱。

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

bash '/tmp/email/a.sh'

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

收到郵件

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

然後在crontab中定時執行這個腳本

crontab -e

添加定時語句,每一分鐘執行一次a.sh的腳本

*/1 * * * * bash /tmp/email/a.sh

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

保存 退出 重啟服務器

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

這是就會每分鐘自動發送給你一次郵件

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

不行我要趕緊關了,這一分鐘一次也太煩了!!小實驗到此實驗成功!

下面寫將python爬取數據的1.txt文本中的內容發送到郵件上的.sh腳本

同樣的步驟依舊在原email的目錄下創建1.sh和1.txt

編寫1.sh內容

echo "this is my computer"|mutt -s "my_conputer server" [email protected] </tmp/email/1.txt -a /tmp/email/1.txt

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

然後讓他定時運行腳本

*/30 * * * * bash /tmp/email/1.sh

30分鐘給我發送一次,自己可以任意修改時間

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

保存,重啟服務

完成.sh腳本的編寫

python爬蟲程序的編寫,將爬取的內容加入的/tmp/email/1.txt文檔中

附錄:隨手最簡單的爬蟲小程序

import urllib.request

from bs4 import BeautifulSoup

url=' http://neihanshequ.com/'

html=urllib.request.urlopen(url).read()

soup=BeautifulSoup(html,"lxml")

ps=soup.find_all('p')

i=[]

for p in ps:

i.append(p.get_text())

with open ('/tmp/email/1.txt','w+') as f:

f.writelines(i)

實現過程 寫好程序同樣也放在email的目錄下

然後crontab加入定時運行python

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

定時運行py

總過程結束

效果圖:

網頁顯示:將郵件放在指定的郵箱。

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

網頁

手機端顯示:設置為每兩分鐘接受一次郵件。

神級程序員的Python爬蟲!服務器定時發郵件(知識點全面)

iphone

做這個小的應用集成,無非是做簡單的技術實現,腦洞打開-同樣也可以將裡面的部分內容去置換。發送的郵件,不是這些無味的粗糧,如一些log日誌,跟進工作中的copy事項,去完成其所需要的要求。

相關推薦

推薦中...