當前位置:
首頁 > 科技 > Python打造最強表白程序

Python打造最強表白程序

作者 | 痴海

情人節剛過,朋友圈又是刷屏的節奏。但熱鬧總是別人的,我們好像只有吃狗糧的份。時間總是飛快流逝,很多事情早已改變,但彷彿只有你的單身狀態從未改變。

單身久的我們,好像覺得一個人過也沒什麼的。但即使非常享受單身生活,大家也要保持「可勾搭」的待機狀態,因為促進荷爾蒙分沁有益身心健康。

在這個人人都在秀的時候,做為程序員我們也要操作起來!散發你們的荷爾蒙!今天就大家奉獻上最強表白程序!此程序結合數據抓取 微信自動發消息 定時任務,實現一個能每天自動定時給你心愛的 ta 發送:你們相識相戀天數 情話 我愛你的圖片。具體的消息如下。

每天發送的消息格式如下:

message ="""

親愛的{}:

早上好,今天是你和 Koc 相戀的第 {} 天~

今天他想對你說的話是:

{}

最後也是最重要的!

""".format("你的好友名稱", str(inLoveDays), love_word)

這裡需要填寫的第一個欄位是 ta 的稱呼,inLoveDays 為你們相識相戀的天數。

love_word 是每天為 ta 精心準備情話內容,當然如果你的文筆好也可以自己寫。

當然最後也是最重要的!每天不盡相同的「我愛你」圖片!

程序思路

本次程序運行的環境是 windows10 Python 3.6,此次主要用到的庫有 selenium、itchat、request。程序主要分為兩部分第一數據的抓取,一些情話信息和圖片信息。另一部就是利用 itchat 自動發送消息給你的好友。

情話信息

如果對你的文筆有信心,那你可以自己寫些情話。當然大部分人的文筆跟我一樣是比較差的,所以這時候我們就可以利用網上的資源,比如下面的情話網站。

http://www.binzz.com/yulu2/3588.html

在抓取這個網站的情話時,如果你利用普通的爬取思路,即利用 request 進行請求,你會發現網頁獲取的數據是亂碼並且不完整。所以在這塊為了操作方便,我利用了 selenium 的 PhantomJS 無頭瀏覽器,來獲取網站的信息。

通過 selenium xpath 我們就可以很輕鬆的獲取到網頁情話,最後把獲取到的數據保存到當前目錄下的「love_word.txt」方便之後的讀取。

表白圖片資源

為了配合此次表白程序,我專門去找了些帶有「我愛你」的圖片資源。通過下面的貼吧貼子,我們就可以獲取到大量的這樣資源。

http://tieba.baidu.com/p/3108805355

此貼並沒有很強的反爬措施,所以我簡單的利用 request re 來獲取到圖片資源,並保存到當前目錄的下「img」文件里。

在保存圖片資源之前,我會先檢查當前目錄下是否有「img」文件夾,如果沒有則會自動創建。

表白程序源碼

此次表白程序主要有 5 個函數

crawl_Love_words()

此函數通過 selenium xpath 來抓取情話網站的資源,並存入到當前目錄下的「love_word.txt」文件。

defcrawl_Love_words():

print("正在抓取情話...")

browser = webdriver.PhantomJS()

url ="http://www.binzz.com/yulu2/3588.html"

browser.get(url)

html = browser.page_source

Selector = etree.HTML(html)

love_words_xpath_str ="//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()

此函數用來爬取貼吧帶有「我愛你」的圖片資源,通過 request re 來實現。代碼並不複雜,在正則表達式那也簡單的寫了一個,用來匹配當前也所有的圖片資源。

defcrawl_love_image():

print("正在抓取我愛你圖片...")

foriinrange(1,22):

url ="http://tieba.baidu.com/p/3108805355?pn={}".format(i)

response = requests.get(url)

html = response.text

pattern = re.compile(r"

.*?.*?

", re.S)

image_url = re.findall(pattern, html)

forj, datainenumerate(image_url):

pics = requests.get(data)

mkdir(pic_path)

fq = open(pic_path "\" str(i) "_" str(j) ".jpg","wb")# 下載圖片,並保存和命名

fq.write(pics.content)

fq.close()

print("圖片抓取完成")

mkdir(path)

此函數用來在當前目錄下創建一個新的文件夾,以便存儲相應的數據。

send_new()

defsend_news():

# 計算相戀天數

inLoveDate = datetime.datetime(2018,8,15)# 相戀的時間

todayDate = datetime.datetime.today()

inLoveDays = (todayDate - inLoveDate).days

# 獲取情話

file_path = os.getcwd() "\" love_word_path

withopen(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[]["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\" file

try:

itchat.send_image(love_image_file, toUserName=girlfriend)

exceptExceptionase:

print(e)

main()

main() 函數就是我們主邏輯函數,程序運行的邏輯順序就是在這個函數里規定的。在 main() 里我首先判斷下當前路徑下是否有「love_word.txt」文件,如果有則提示相應的信息,沒有的話才去執 crawl_Love_words() 函數,去網上抓取一些情話數據。

其次再判斷下當前目錄下是否有「img」文件夾,用來判斷我們是否有圖片資源,沒有則執行 crawl_love_image() 來抓取貼吧上的圖片資源。

最後我們所需的數據都已準備完善,則調用 send_news() 函數,整理下要發送的數據格式,然後自動給你的 ta 發送消息。

定時任務

每天定時發送我主要是用 while True 簡單的實現,通過判斷當前的時間是否是你所需要發送的時間,來達到每天定時發送。

表白程序使用教程

因為我在登錄時添加了「hotReload=True」,所以程序在下次運行時就無需再重新登錄。

總結

文章標題寫著「最強表白程序」,雖然有點誇張了,但此次的程序還有很多可以繼續添加的地方。比如對於發送的消息欄位,我們還可以繼續添加天氣信息、星座信息、娛樂新聞、最近的趣事、最近好看的電影等等。只要你能想到的內容,都可以添加上去。

這些信息在網上都可以獲取的到,我們只要通過同樣的思路,先抓取到本地,然後進行讀取。當然如果你覺得存儲本地會有被刪的風險,那麼你也可以保存到雲端,在雲端上進行存儲。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI科技大本營 的精彩文章:

用Python解鎖「吃雞」正確姿勢

TAG:AI科技大本營 |