Python打造最強表白程式
作者 | 痴海
轉載自公眾號痴海(ID:ch726612)
情人節剛過,朋友圈又是刷屏的節奏。但熱鬧總是別人的,我們好像只有吃狗糧的份。時間總是飛快流逝,很多事情早已改變,但彷彿只有你的單身狀態從未改變。
單身久的我們,好像覺得一個人過也沒什麼的。但即使非常享受單身生活,大家也要保持“可勾搭”的待機狀態,因為促進荷爾蒙分沁有益身心健康。
在這個人人都在秀的時候,做為程式設計師我們也要操作起來!散發你們的荷爾蒙!今天就大家奉獻上最強表白程式!此程式結合資料抓取 + 微信自動發訊息 + 定時任務,實現一個能每天自動定時給你心愛的 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」檔案。
def crawl_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)
for i in love_words:
word = i.strip("\n\t\u3000\u3000").strip()
with open(love_word_path, "a") as file:
file.write(word + "\n")
print("情話抓取完成")
crawl_love_image()
此函式用來爬取貼吧帶有「我愛你」的圖片資源,通過 request + re 來實現。程式碼並不複雜,在正規表示式那也簡單的寫了一個,用來匹配當前也所有的圖片資源。
def crawl_love_image():
print("正在抓取我愛你圖片...")
for i in range(1, 22):
url = "http://tieba.baidu.com/p/3108805355?pn={}".format(i)
response = requests.get(url)
html = response.text
pattern = re.compile(r'<div.*?class="d_post_content j_d_post_content.*?">.*?<img class="BDE_Image" src="(.*?)".*?>.*?</div>', re.S)
image_url = re.findall(pattern, html)
for j, data in enumerate(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)
此函式用來在當前目錄下建立一個新的資料夾,以便儲存相應的資料。
def mkdir(path):
folder = os.path.exists(path)
if not folder: # 判斷是否存在資料夾如果不存在則建立為資料夾
os.makedirs(path) # makedirs 建立檔案時如果路徑不存在會建立這個路徑
print("--- new folder... ---")
print("--- OK ---")
else:
print("正在儲存圖片中...")
send_new()
此函式通過利用 itchat 庫,實現給你的微信好友自動傳送訊息。在這個函式中我利用 datetime 來計算你們之間相識相戀的時間。並且在登入的時候新增了一個「hotReload=True」,這樣你就可以不用每次執行程式的時候都要登入。關於 itchat 更多的操作,大家可以去網上查詢相應的資料。
def send_news():
# 計算相戀天數
inLoveDate = datetime.datetime(2018, 8, 15) # 相戀的時間
todayDate = datetime.datetime.today()
inLoveDays = (todayDate - inLoveDate).days
# 獲取情話
file_path = os.getcwd() + '\\' + love_word_path
with open(file_path) as file:
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\\" + file
try:
itchat.send_image(love_image_file, toUserName=girlfriend)
except Exception as e:
print(e)
main()
main() 函式就是我們主邏輯函式,程式執行的邏輯順序就是在這個函式裡規定的。在 main() 裡我首先判斷下當前路徑下是否有「love_word.txt」檔案,如果有則提示相應的資訊,沒有的話才去執 crawl_Love_words() 函式,去網上抓取一些情話資料。
其次再判斷下當前目錄下是否有「img」資料夾,用來判斷我們是否有圖片資源,沒有則執行 crawl_love_image() 來抓取貼吧上的圖片資源。
最後我們所需的資料都已準備完善,則呼叫 send_news() 函式,整理下要傳送的資料格式,然後自動給你的 ta 傳送訊息。
定時任務
每天定時傳送我主要是用 while True 簡單的實現,通過判斷當前的時間是否是你所需要傳送的時間,來達到每天定時傳送。
表白程式使用教程
首先你把相應的原始碼下載下來,後臺回覆「表白」即可獲取。其次把相應的庫先事先安裝好,隨後執行程式則會顯示一個微信網頁登入的二維碼,掃描登入即可。
因為我在登入時新增了「hotReload=True」,所以程式在下次執行時就無需再重新登入。
總結
文章標題寫著「最強表白程式」,雖然有點誇張了,但此次的程式還有很多可以繼續新增的地方。比如對於傳送的訊息欄位,我們還可以繼續新增天氣資訊、星座資訊、娛樂新聞、最近的趣事、最近好看的電影等等。只要你能想到的內容,都可以新增上去。
這些資訊在網上都可以獲取的到,我們只要通過同樣的思路,先抓取到本地,然後進行讀取。當然如果你覺得儲存本地會有被刪的風險,那麼你也可以儲存到雲端,在雲端上進行儲存。
(本文為AI科技大本營原創文章,轉載請微信聯絡 1092722531)
精彩推薦推薦閱讀:
點選“閱讀原文”,開啟CSDN APP 閱讀更貼心。
相關文章
- 表白小程式
- 浪漫表白程式碼
- 如何打造最強的資料驅動組織
- 郵件營銷+會展:打造最強品牌曝光組合
- 校園表白牆告白牆表白網站程式原始碼搭建教程網站原始碼
- 前端程式設計師表白神器前端程式設計師
- 資料領域最強程式語言Python和R要合作了!Python
- 第三個java程式(表白小卡片)Java
- 表白程式碼製作(附原始碼)原始碼
- 高科技表白 程式猿的福音!
- python製作exe可執行表白神器Python
- Go 1.18 最強程式碼自測方法!Go
- 史上最強程式碼註釋(不看後悔)
- 華為分析服務功能再次升級:打造你的應用“最強大腦”!
- Mac 使用者如何打造史上最強終端【1.7 熱門分享回顧】Mac
- 阿里最強 Python 自動化工具開源了!阿里Python
- ARM停止授權,華為迎來最嚴峻挑戰,任正非:投資千億打造全球最強資訊產業產業
- 智慧油氣田視覺化,打造油氣田管控的“最強大腦”視覺化
- 幾條曲線構建Android表白程式Android
- 程式設計師們的愛情表白書程式設計師
- 微軟最強 Python 自動化工具開源了!不用寫一行程式碼!微軟Python行程
- AI晶片最強科普AI晶片
- json最強攻略JSON
- 史上最強程式碼自測方法,沒有之一!
- 一個程式設計師的愛情表白書程式設計師
- 推薦一款最強Python自動化神器!不用寫一行程式碼!Python行程
- 情人節來了,教你個用 Python 表白的技巧Python
- 你還用ES存請求日誌?ClickHouse+Vector打造最強Grafana日誌分析看板Grafana
- 520表白小程式設計Python程式碼詳解(PyQt5介面,B站動漫風)程式設計PythonQT
- 遊戲圈最強老賴?遊戲
- HTTP最強資料大全HTTP
- 地表最強面試圖譜面試
- Overture 5 最強排版教程
- 最強本地快取Caffeine快取
- 誰是最強谷民
- 十款程式碼表白特效,一個比一個浪漫!特效
- 七夕——程式設計師獨有的表白方式程式設計師
- 盤點最強最實用的Linux命令!Linux