情人節(jié)剛過,朋友圈又是刷屏的節(jié)奏。但熱鬧總是別人的,我們好像只有吃狗糧的份。時間總是飛快流逝,很多事情早已改變,但仿佛只有你的單身狀態(tài)從未改變。
單身久的我們,好像覺得一個人過也沒什么的。但即使非常享受單身生活,大家也要保持“可勾搭”的待機狀態(tài),因為促進荷爾蒙分沁有益身心健康。
在這個人人都在秀的時候,做為程序員我們也要操作起來!散發(fā)你們的荷爾蒙!今天就大家奉獻上最強表白程序!此程序結(jié)合數(shù)據(jù)抓取 + 微信自動發(fā)消息 + 定時任務(wù),實現(xiàn)一個能每天自動定時給你心愛的 ta 發(fā)送:你們相識相戀天數(shù) + 情話 + 我愛你的圖片。具體的消息如下。
每天發(fā)送的消息格式如下:
message="""親愛的{}:早上好,今天是你和Koc相戀的第{}天~今天他想對你說的話是:{}最后也是最重要的!""".format("你的好友名稱",str(inLoveDays),love_word)
這里需要填寫的第一個字段是 ta 的稱呼,inLoveDays 為你們相識相戀的天數(shù)。
love_word 是每天為 ta 精心準備情話內(nèi)容,當然如果你的文筆好也可以自己寫。
當然最后也是最重要的!每天不盡相同的「我愛你」圖片!
程序思路
本次程序運行的環(huán)境是 windows10 + Python 3.6,此次主要用到的庫有 selenium、itchat、request。程序主要分為兩部分第一數(shù)據(jù)的抓取,一些情話信息和圖片信息。另一部就是利用 itchat 自動發(fā)送消息給你的好友。
情話信息
如果對你的文筆有信心,那你可以自己寫些情話。當然大部分人的文筆跟我一樣是比較差的,所以這時候我們就可以利用網(wǎng)上的資源,比如下面的情話網(wǎng)站。
http://www.binzz.com/yulu2/3588.html
在抓取這個網(wǎng)站的情話時,如果你利用普通的爬取思路,即利用 request 進行請求,你會發(fā)現(xiàn)網(wǎng)頁獲取的數(shù)據(jù)是亂碼并且不完整。所以在這塊為了操作方便,我利用了 selenium 的 PhantomJS 無頭瀏覽器,來獲取網(wǎng)站的信息。
通過 selenium + xpath 我們就可以很輕松的獲取到網(wǎng)頁情話,最后把獲取到的數(shù)據(jù)保存到當前目錄下的「love_word.txt」方便之后的讀取。
表白圖片資源
為了配合此次表白程序,我專門去找了些帶有「我愛你」的圖片資源。通過下面的貼吧貼子,我們就可以獲取到大量的這樣資源。
http://tieba.baidu.com/p/3108805355
此貼并沒有很強的反爬措施,所以我簡單的利用 request + re 來獲取到圖片資源,并保存到當前目錄的下「img」文件里。
在保存圖片資源之前,我會先檢查當前目錄下是否有「img」文件夾,如果沒有則會自動創(chuàng)建。
表白程序源碼
此次表白程序主要有 5 個函數(shù)
crawl_Love_words()
此函數(shù)通過 selenium +xpath來抓取情話網(wǎng)站的資源,并存入到當前目錄下的「love_word.txt」文件。
defcrawl_Love_words():print("正在抓取情話...")browser=webdriver.PhantomJS()url="http://www.binzz.com/yulu2/3588.html"browser.get(url)html=browser.page_sourceSelector=etree.HTML(html)love_words_xpath_str="http://div[@id='content']/p/text()"love_words=Selector.xpath(love_words_xpath_str)foriinlove_words:word=i.strip(" u3000u3000").strip()withopen(love_word_path,"a")asfile:file.write(word+" ")print("情話抓取完成")
crawl_love_image()
此函數(shù)用來爬取貼吧帶有「我愛你」的圖片資源,通過 request + re 來實現(xiàn)。代碼并不復(fù)雜,在正則表達式那也簡單的寫了一個,用來匹配當前也所有的圖片資源。
defcrawl_love_image():print("正在抓取我愛你圖片...")foriinrange(1,22):url="http://tieba.baidu.com/p/3108805355?pn={}".format(i)response=requests.get(url)html=response.textpattern=re.compile(r'
mkdir(path)
此函數(shù)用來在當前目錄下創(chuàng)建一個新的文件夾,以便存儲相應(yīng)的數(shù)據(jù)。
defmkdir(path):folder=os.path.exists(path)ifnotfolder:#判斷是否存在文件夾如果不存在則創(chuàng)建為文件夾os.makedirs(path)#makedirs創(chuàng)建文件時如果路徑不存在會創(chuàng)建這個路徑print("---newfolder...---")print("---OK---")else:print("正在保存圖片中...")
send_new()
此函數(shù)通過利用 itchat 庫,實現(xiàn)給你的微信好友自動發(fā)送消息。在這個函數(shù)中我利用 datetime 來計算你們之間相識相戀的時間。并且在登錄的時候添加了一個「hotReload=True」,這樣你就可以不用每次運行程序的時候都要登錄。關(guān)于 itchat 更多的操作,大家可以去網(wǎng)上查找相應(yīng)的資料。
defsend_news():#計算相戀天數(shù)inLoveDate=datetime.datetime(2018,8,15)#相戀的時間todayDate=datetime.datetime.today()inLoveDays=(todayDate-inLoveDate).days#獲取情話file_path=os.getcwd()+'\'+love_word_pathwithopen(file_path)asfile:love_word=file.readlines()[inLoveDays].split(':')[1]itchat.auto_login(hotReload=True)#熱啟動,不需要多次掃碼登錄my_friend=itchat.search_friends(name=u'你的好友名稱')girlfriend=my_friend[0]["UserName"]print(girlfriend)message="""親愛的{}:早上好,今天是你和Koc相戀的第{}天~今天他想對你說的話是:{}最后也是最重要的!""".format("你的好友名稱",str(inLoveDays),love_word)itchat.send(message,toUserName=girlfriend)files=os.listdir(pic_path)file=files[inLoveDays]love_image_file="D:\img"+filetry:itchat.send_image(love_image_file,toUserName=girlfriend)exceptExceptionase:print(e)
main()
main() 函數(shù)就是我們主邏輯函數(shù),程序運行的邏輯順序就是在這個函數(shù)里規(guī)定的。在 main() 里我首先判斷下當前路徑下是否有「love_word.txt」文件,如果有則提示相應(yīng)的信息,沒有的話才去執(zhí) crawl_Love_words() 函數(shù),去網(wǎng)上抓取一些情話數(shù)據(jù)。
其次再判斷下當前目錄下是否有「img」文件夾,用來判斷我們是否有圖片資源,沒有則執(zhí)行 crawl_love_image() 來抓取貼吧上的圖片資源。
最后我們所需的數(shù)據(jù)都已準備完善,則調(diào)用 send_news() 函數(shù),整理下要發(fā)送的數(shù)據(jù)格式,然后自動給你的 ta 發(fā)送消息。
定時任務(wù)
每天定時發(fā)送我主要是用 while True 簡單的實現(xiàn),通過判斷當前的時間是否是你所需要發(fā)送的時間,來達到每天定時發(fā)送。
表白程序使用教程
首先你把相應(yīng)的源碼下載下來,后臺回復(fù)「表白」即可獲取。其次把相應(yīng)的庫先事先安裝好,隨后運行程序則會顯示一個微信網(wǎng)頁登錄的二維碼,掃描登錄即可。
因為我在登錄時添加了「hotReload=True」,所以程序在下次運行時就無需再重新登錄。
總結(jié)
文章標題寫著「最強表白程序」,雖然有點夸張了,但此次的程序還有很多可以繼續(xù)添加的地方。比如對于發(fā)送的消息字段,我們還可以繼續(xù)添加天氣信息、星座信息、娛樂新聞、最近的趣事、最近好看的電影等等。只要你能想到的內(nèi)容,都可以添加上去。
這些信息在網(wǎng)上都可以獲取的到,我們只要通過同樣的思路,先抓取到本地,然后進行讀取。當然如果你覺得存儲本地會有被刪的風險,那么你也可以保存到云端,在云端上進行存儲。
-
程序
+關(guān)注
關(guān)注
117文章
3798瀏覽量
81466 -
源碼
+關(guān)注
關(guān)注
8文章
653瀏覽量
29518 -
python
+關(guān)注
關(guān)注
56文章
4811瀏覽量
85078
原文標題:Python打造最強表白程序
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
表白神器:表白還是要浪漫點才行
怎樣才能快速入坑Python?Python入門最強書單合集
Python編程實用指南
Python程序員必須掌握從Python2到Python3的轉(zhuǎn)型
Python登上“最強王者”中國程序猿是“全場MVP”
![<b class='flag-5'>Python</b>登上“<b class='flag-5'>最強</b>王者”中國<b class='flag-5'>程序</b>猿是“全場MVP”](https://file.elecfans.com/web1/M00/85/6C/pIYBAFxndIOAOBKmAAAI8YPjcZE471.jpg)
Python的函數(shù)文件與模塊的程序說明
![<b class='flag-5'>Python</b>的函數(shù)文件與模塊的<b class='flag-5'>程序</b>說明](https://file.elecfans.com/web1/M00/C6/A1/pIYBAF9Z4xaALpuGAAQeMuXCMwE140.png)
評論