一年一度的七夕又到了,朋友圈又是刷屏的節(jié)奏。但熱鬧總是別人的,我們好像只有吃狗糧的份。時(shí)間總是飛快流逝,很多事情早已改變,但仿佛只有你的單身狀態(tài)從未改變。
單身久的我們,好像覺(jué)得一個(gè)人過(guò)也沒(méi)什么的。但即使非常享受單身生活,大家也要保持“可勾搭”的待機(jī)狀態(tài),因?yàn)榇龠M(jìn)荷爾蒙分沁有益身心健康。
在這個(gè)人人都在秀的時(shí)候,做為程序員我們也要操作起來(lái)!散發(fā)你們的荷爾蒙!今天就大家奉獻(xiàn)上七夕最強(qiáng)表白程序!此程序結(jié)合數(shù)據(jù)抓取 + 微信自動(dòng)發(fā)消息 + 定時(shí)任務(wù),實(shí)現(xiàn)一個(gè)能每天自動(dòng)定時(shí)給你心愛(ài)的 ta 發(fā)送:你們相識(shí)相戀天數(shù) + 情話 + 我愛(ài)你的圖片。具體的消息如下。
每天發(fā)送的消息格式如下:
這里需要填寫的第一個(gè)字段是 ta 的稱呼,inLoveDays 為你們相識(shí)相戀的天數(shù)。
love_word 是每天為 ta 精心準(zhǔn)備情話內(nèi)容,當(dāng)然如果你的文筆好也可以自己寫。
當(dāng)然最后也是最重要的!每天不盡相同的「我愛(ài)你」圖片!
程序思路
本次程序運(yùn)行的環(huán)境是 windows10 + Python 3.6,此次主要用到的庫(kù)有 selenium、itchat、request。程序主要分為兩部分第一數(shù)據(jù)的抓取,一些情話信息和圖片信息。另一部就是利用 itchat 自動(dòng)發(fā)送消息給你的好友。
情話信息
如果對(duì)你的文筆有信心,那你可以自己寫些情話。當(dāng)然大部分人的文筆跟我一樣是比較差的,所以這時(shí)候我們就可以利用網(wǎng)上的資源,比如下面的情話網(wǎng)站。
http://www.binzz.com/yulu2/3588.html
在抓取這個(gè)網(wǎng)站的情話時(shí),如果你利用普通的爬取思路,即利用 request 進(jìn)行請(qǐng)求,你會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)獲取的數(shù)據(jù)是亂碼并且不完整。所以在這塊為了操作方便,我利用了 selenium 的 PhantomJS 無(wú)頭瀏覽器,來(lái)獲取網(wǎng)站的信息。
通過(guò) selenium + xpath 我們就可以很輕松的獲取到網(wǎng)頁(yè)情話,最后把獲取到的數(shù)據(jù)保存到當(dāng)前目錄下的「love_word.txt」方便之后的讀取。
表白圖片資源
為了配合此次七夕表白程序,我專門去找了些帶有「我愛(ài)你」的圖片資源。通過(guò)下面的貼吧貼子,我們就可以獲取到大量的這樣資源。
http://tieba.baidu.com/p/3108805355
此貼并沒(méi)有很強(qiáng)的反爬措施,所以我簡(jiǎn)單的利用 request + re 來(lái)獲取到圖片資源,并保存到當(dāng)前目錄的下「img」文件里。
在保存圖片資源之前,我會(huì)先檢查當(dāng)前目錄下是否有「img」文件夾,如果沒(méi)有則會(huì)自動(dòng)創(chuàng)建。
表白程序源碼
此次表白程序主要有 5 個(gè)函數(shù)
crawl_Love_words()
此函數(shù)通過(guò) selenium + xpath 來(lái)抓取情話網(wǎng)站的資源,并存入到當(dāng)前目錄下的「love_word.txt」文件。
crawl_love_image()
在學(xué)習(xí)中有迷茫不知如何學(xué)習(xí)的朋友小編推薦一個(gè)學(xué)Python的學(xué)習(xí)裙[663033228]無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!
此函數(shù)用來(lái)爬取貼吧帶有「我愛(ài)你」的圖片資源,通過(guò) request + re 來(lái)實(shí)現(xiàn)。代碼并不復(fù)雜,在正則表達(dá)式那也簡(jiǎn)單的寫了一個(gè),用來(lái)匹配當(dāng)前也所有的圖片資源。
mkdir(path)
此函數(shù)用來(lái)在當(dāng)前目錄下創(chuàng)建一個(gè)新的文件夾,以便存儲(chǔ)相應(yīng)的數(shù)據(jù)。
send_new()
此函數(shù)通過(guò)利用 itchat 庫(kù),實(shí)現(xiàn)給你的微信好友自動(dòng)發(fā)送消息。在這個(gè)函數(shù)中我利用 datetime 來(lái)計(jì)算你們之間相識(shí)相戀的時(shí)間。并且在登錄的時(shí)候添加了一個(gè)「hotReload=True」,這樣你就可以不用每次運(yùn)行程序的時(shí)候都要登錄。關(guān)于 itchat 更多的操作,大家可以去網(wǎng)上查找相應(yīng)的資料。
main()
main() 函數(shù)就是我們主邏輯函數(shù),程序運(yùn)行的邏輯順序就是在這個(gè)函數(shù)里規(guī)定的。在 main() 里我首先判斷下當(dāng)前路徑下是否有「love_word.txt」文件,如果有則提示相應(yīng)的信息,沒(méi)有的話才去執(zhí) crawl_Love_words() 函數(shù),去網(wǎng)上抓取一些情話數(shù)據(jù)。
其次再判斷下當(dāng)前目錄下是否有「img」文件夾,用來(lái)判斷我們是否有圖片資源,沒(méi)有則執(zhí)行 crawl_love_image() 來(lái)抓取貼吧上的圖片資源。
最后我們所需的數(shù)據(jù)都已準(zhǔn)備完善,則調(diào)用 send_news() 函數(shù),整理下要發(fā)送的數(shù)據(jù)格式,然后自動(dòng)給你的 ta 發(fā)送消息。
定時(shí)任務(wù)
每天定時(shí)發(fā)送我主要是用 while True 簡(jiǎn)單的實(shí)現(xiàn),通過(guò)判斷當(dāng)前的時(shí)間是否是你所需要發(fā)送的時(shí)間,來(lái)達(dá)到每天定時(shí)發(fā)送。
表白程序使用教程
首先你把相應(yīng)的源碼下載下來(lái),后臺(tái)回復(fù)「表白」即可獲取。其次把相應(yīng)的庫(kù)先事先安裝好,隨后運(yùn)行程序則會(huì)顯示一個(gè)微信網(wǎng)頁(yè)登錄的二維碼,掃描登錄即可。
此圖因?yàn)槠脚_(tái)不能直接放上二維碼,所以大家自己腦補(bǔ)一下。
因?yàn)槲以诘卿洉r(shí)添加了「hotReload=True」,所以程序在下次運(yùn)行時(shí)就無(wú)需再重新登錄。
總結(jié)
文章標(biāo)題寫著「最強(qiáng)表白程序」,雖然有點(diǎn)夸張了,但此次的程序還有很多可以繼續(xù)添加的地方。比如對(duì)于發(fā)送的消息字段,我們還可以繼續(xù)添加天氣信息、星座信息、娛樂(lè)新聞、最近的趣事、最近好看的電影等等。只要你能想到的內(nèi)容,都可以添加上去。
這些信息在網(wǎng)上都可以獲取的到,我們只要通過(guò)同樣的思路,先抓取到本地,然后進(jìn)行讀取。當(dāng)然如果你覺(jué)得存儲(chǔ)本地會(huì)有被刪的風(fēng)險(xiǎn),那么你也可以保存到云端,在云端上進(jìn)行存儲(chǔ)。