很多小夥伴找我問:老鐵,這些代碼我寫的和你一樣,為什麼我的不行。其實這是最基本的函數,你照葫蘆畫瓢是沒什麼多大的作用的。我不會直接告訴你答案也不是我不想告訴你,而是希望你能跟著思路,自己找到答案,這才是真的學會了,掌握了這其中的知識點,下次在遇到就會了,而不是到處去問。如果你還在迷茫,不知道該往哪個方向走,如果你還找不到Python的入門,如果你還在為碰到各種知識點不會而苦惱,那就加小編自己弄的一個交流學習基地吧。大家可以加入交流基地:58937142,裡面新手入門資料,可以說從零到項目實戰,都是可以免費獲取的,還有熱心腸的答疑小夥伴為各位免費解答問題,熱心腸的小夥伴也是蠻多的。不失為是一個交流的的好地方,小編在這裡邀請大家加入我的大家庭。歡迎你的到來。一起交流學習!共同進步!小編等你!
前言
開心做技術
在深入感受到爬蟲的樂趣的時候,多想用它乾點簡單的事情,我非常喜歡瀏覽某網站的熱點新聞,但如果那天學習忙的天花亂綴(chu qu gui hun)的時候,“WC、WC、我錯過了什麼大事情”,就會錯過當時的熱點。怎麼才能記錄下呢!
預期達成效果:
python爬去某網站上的時刻下最熱點新聞,存儲到文檔中。在lunix下定時每隔n小時啟用python去爬取新聞,然後用郵件的形式每隔n小時將新聞文檔發到自己的郵箱,以便朕統一的查閱。
執行計劃:
定時執行任務配置【Ubuntu環境下】
發送郵件相關配置
執行腳本編寫
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
使用vi編譯器,第一次使用Ubuntu它會讓你選著編譯器,不要相信他的箭頭(easies?)用了老半天就他最費勁 ,還是選擇vi,別問為什麼, 順 手!
在裡面最下面鍵入:測試代碼
同時在目錄下創建/tmp/1.txt
*/1 * * * * date >> /tmp/1.txt
意思是每一分鐘將當時的數據打印到/tmp/1.txt中
然後esc –》:wq退出
保存之後重啟服務
root123456@ubuntu:~$ sudo service cron restart
查看結果
root123456@ubuntu:~$ cat /tmp/1.txt
每分鐘去打印一次時間到1.txt上
定時執行任務這步就可以確定定時可以使用了額,上面的配置是測試定時任務,認識到定時啟動任務是什麼形式的,還可以去找其他的例子,變換時間 和執行的命令自己做測試。
這步驟是為了後面做鋪墊,是後面的基礎,就先在這提前介紹了。因為後面很“激情”來不及詳細補充定時功能。
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
在安裝的過程中會出現package configuration,這時候發現無發選到ok
按住Tab點亮ok 然後按住Enter鍵,接下來一頓默認猛如虎的操作(就乖乖的選默認)
假裝有圖(安過後就忘了截圖嚕!)
配置Muttrc
打開文件,路徑/etc/Muttrc
set sendmail="/usr/bin/msmtp" set use_from=yes
配置msmtp
msmtp默認沒有,所以在/etc路徑下創建msmtprc配置文件
我本想用日誌文件做測試,創建/var/log/msmtp.log,如果發生錯誤的話,能檢測到原因
打開msmtprc文件配置下面的內容
account default host smtp.163.com 不要動from [email protected] 你的郵箱
這個設置權限步驟,只要你膽子大就不用(我是沒改,太難了)
由於我們的密碼是明文,所以要稍稍的修改下權限(哈哈,你看不到我的pw,你看不到)
chmod 600 msmtprc
現在基本配置完成了,使用命令行輸出測試一波
我把以my_first_test為主題,test為內容的郵件發送到另一個我的郵箱
echo "test" |mutt -s "my_first_test" [email protected]
哈哈,成功
到這裡郵箱配置的環境可以了,現在只能只能用命令行發送郵件。如何做到自動發送,且向下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郵箱,在設置裡面
查看,應該是沒開啟的狀態,我的開啟了
點擊開啟,手機驗證,輸入的密碼就是上面配置中輸入的密碼
同時開通POP3/SMTP/IMTP郵件收發服務,你的手機郵件都會記錄下這個密碼的。
在測試的時候出現錯誤:不要怕,去翻譯去百度(我就是這麼煎熬的過來的)
3、執行腳本編寫
前面的的步驟成在Ubuntu上配置,下面就讓發送郵件和定時功能結合起來,編寫.sh小腳本
在tmp下創建emil文件夾
測試小實驗:
在裡面創建a.sh文件,輸入
echo "aaaaaaaaaa" | mutt -s "this is title" [email protected]
郵箱是要發到的郵箱。
bash '/tmp/email/a.sh'
收到郵件
然後在crontab中定時執行這個腳本
crontab -e
添加定時語句,每一分鐘執行一次a.sh的腳本
*/1 * * * * bash /tmp/email/a.sh
保存 退出 重啟服務器
這是就會每分鐘自動發送給你一次郵件
不行我要趕緊關了,這一分鐘一次也太煩了!!小實驗到此實驗成功!
下面寫將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
然後讓他定時運行腳本
*/30 * * * * bash /tmp/email/1.sh
30分鐘給我發送一次,自己可以任意修改時間
保存,重啟服務
完成.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
定時運行py
總過程結束
效果圖:
網頁顯示:將郵件放在指定的郵箱。
網頁
手機端顯示:設置為每兩分鐘接受一次郵件。
iphone
做這個小的應用集成,無非是做簡單的技術實現,腦洞打開-同樣也可以將裡面的部分內容去置換。發送的郵件,不是這些無味的粗糧,如一些log日誌,跟進工作中的copy事項,去完成其所需要的要求。