基於新浪微博的男女性擇偶觀數據分析
版權聲明: 基於新浪微博的男女性擇偶觀數據分析 ,由 Payne 首次發表於 飛鴻踏雪的部落格 ,本文地址為: http://qinyuanpei.github.io/2017/12/23/a-data-analyse-about-the-view-of-choosing-spouse-based-on-weibo.html ,轉載請註明作者和出處。
或許是因為我喜歡的姑娘從來都不喜歡我,而感情上的挫折一度讓我陷入無盡的自卑。朋友在朋友圈裡發布一條關於皮影戲的動態,我開玩笑說這個皮影戲結局應該是個悲劇,因為我注意到在劇中,無論一個人如何賣力地表演甚至雙腿跪倒在地,有的人從故事開場到結束一直對此無動於衷。朋友回復我說,這不就是你現在的狀態嗎?我沉默半天終於熄滅手機屏幕。我聽到過各種各樣讓我放棄她的話,即使這種念頭在我腦海里萌生已久,是幻想讓我硬生生地拖了這麼久。當你努力想要融入對方的生活,而等待你的是一道冰冷的牆。這種感覺像什麼呢?大概就是一個又一個「好友」安安靜靜地躺在聯繫人的置頂名單里,不敢發消息讓對方知道,更不願殘忍地把對方刪除。我安慰自己說,對我而言,我失去的是一個不喜歡你的人;而對對方而言,失去的是一個喜歡她的人。你當然可以說我沒有那麼喜歡她,如果一定要喜歡到卑微如塵土的地步,我寧願一個人單身到天荒地老。
當我意識到人與人間,即使親近如父母尚且無法完全理解彼此的時候,我忽然發現一個有趣的現象,我們喜歡一個人的時候,首先注意到的會是外表,我們將其稱之為眼緣,所以人與人間的感情紐帶最初會是吸引,而後是了解彼此的優缺點,最終是相互理解和扶持。可我們知道,外表是可以偽裝出來的,所以我們習慣通過外表和言語來評價一個人,這就像是數學歸納法,我們總認為推倒第一塊多諾米骨牌,就意味著所有多諾米骨牌都會倒下。可現實世界矛盾的地方就在於,我們認為理所當然正確的事情,或許正是我們無法證明其正確性的,這在數學上稱為哥德爾不完備定理。所以,一件殘酷的事情是,當你無法吸引一個人的時候,通往內心世界的路就被堵死了。朋友圈裡精彩紛呈的社交互動,並不代表有人願意真正了解你的生活,何況是你吸引不到的人呢?我很想知道,我們在選擇伴侶的時候到底看中什麼,所以我一直在關注@西安月老牽線上發布的徵婚交友類微博,本文的故事從這裡正式展開。
身高175的悲傷
或許你以為我會無聊到試圖從微博上找到女朋友,可事實上作為一個程序員的我,即使整天投入精力在編程上,依然無法避免對象空引用的異常出現。如果說找到女朋友是個小概率事件,那麼在我看來,找到一個真正懂我、喜歡我的女朋友,基本上是不可能事件。你不要覺得我對沒有調整好心態、對生活過分悲觀,如果你了解貝葉斯公式就會真正地理解我說的話。這個微博開始引起我的注意,是我發現身高在155到165左右的女生,對男生的要求基本上無疑例外地是175+到180+,我想知道到底有多少女生是有這樣的想法,這是我想要抓取新浪微博的數據進行分析的初衷。更重要的是,身高不到175的我在面對這種要求的時候是悲傷的,因為我想起了《巴黎聖母院》中的卡西莫多,一個外表醜陋而擁有高尚人格的「醜八怪」。現代人整天都特別忙碌,以至於沒有人會有耐心,園藝在忍受著你醜陋的外表的同時,同你講一隻小兔子親了它喜歡的長頸鹿一下這種故事。
我聽到這樣一句話,「好看的皮囊千篇一律,有趣的靈魂萬里挑一」,可誰會覺得像卡西莫夫這樣的人,會擁有或者配擁有高尚的人格呢?我們這副皮囊不管好看與否,它們都是父母給予我們的最好的禮物。難道一個所謂情商高的人,會在收到別人的時候因為禮物不好看而生氣嗎? 我想起《畫心》里懊悔受狐妖小唯皮相蠱惑而自毀雙目的霍心,美醜都是父母賜予我們的,不該被我們拿來一番大肆炫耀,可我還是想知道,我們評價一個人的標準到底是什麼?因為我漸漸明白,有些人不喜歡我們,並不是我們不好,而僅僅是某一點和對方不匹配。喜歡一個人的時候,像拔下身上的一根根刺,因為你越是得不到回應,就越像變成對方期待的樣子,這個過程會讓你覺得自己一無是處。直到今天看到一句話,一句足以熱淚盈眶的話,如果不曾喜歡你,我本來非常可愛的。有時候,人做一件事情,或許就是在和自己過不去,比如說這件事情。
花點時間爬爬微博
好了,現在我們來考慮從新浪微博上抓取@西安月老牽線上發布的微博,因為這是我們進行數據分析的前提。事實上,在寫這篇文章前我曾花了大量時間來調試爬蟲,然後用了一天的時間對數據進行清洗,最終利用晚上下班的時間生成詞雲。由此我們可以理出整體的思路:
通過流程圖我們可以注意到,在這裡我選擇了Python來實現整個功能。轉眼間我已經25歲了,這是種什麼樣的概念呢?兩年前我23歲的時候,聽別人討論結婚這個問題,我覺得它離我還很遙遠。如今看著周圍人都結婚了,我竟有種「高處不勝寒」的感覺。所以呢,人生苦短,當你不能阻止時間一天天消逝的時候,你只能趁著現在去做你想做的事情,為了節省時間去做技術以外的嘗試,我選擇擁有全世界最豐富的庫的Python。
這段時間學習數據分析,我漸漸意識到我們所熟悉的這個世界,如果以一種理性的角度,完全通過數據來解構的話,我們在這個數字時代里留下的每一條訊息,都冷冰冰地暴露著我們的喜怒哀樂,每一張照片里細微的表情變化,每一段文字里隱匿著的真實意圖,都能被人臉識別和自然語言處理等等,這類人工智慧為代表的技術所解讀,我們努力想在朋友圈裡隱藏些什麼,當朋友圈的訪問範圍從半年逐漸縮小到三天,我們究竟能隱藏下什麼呢?
微博爬蟲分析
首先,我們需要從微博上抓取數據下來,我沒有去做抓包分析這樣的重複性工作,因為我注意到這個問題,在網路上有很多朋友在討論,我主要參考了以下內容:
- Python 爬蟲如何機器登錄新浪微博並抓取內容?
- xchaoinfo/fuck-login
- 用Python寫一個簡單的微博爬蟲
通過以上內容,我了解到在抓取新浪微博數據的問題上,我們基本會有以下思路:
- 保存cookie信息,利用requests庫發起請求並帶上cookie
- 利用requests庫模擬登錄新浪微博並在請求過程中保持cookie
- 利用selenium庫模擬登錄新浪微博然後取得頁面內容
- 利用PhantomJS庫模擬登錄新浪微博然後取得頁面內容
可以看出差異主要集中在cookie的獲取以及是否支持headless模式,並且我們得到一個共識,抓取新浪微博[移動版](微博廣場)要比[PC版](Sina Visitor System)要容易,因為移動版優先為小尺寸屏幕設備提供服務,因而頁面結構相對整潔便於我們提取數據。起初博主認為第一種方式太簡單粗暴,堅持要採用第二種方式去實現,最終證明還是太年輕了啊,新浪微博的登錄給人的感覺就是蛋疼,這裡就簡單介紹下思路哈。
首先我們會向伺服器發出一次GET請求,它返回的結果是一段JavaScript代碼,然後我們需要用正則匹配出其中的JSON字元,這樣我們就獲得了第二次請求需要用到的參數;接下來,第二次請求是一個POST請求,我們需要將用戶名採用Base64加密,密碼則採用RSA加密,需要用到第一次請求返回的參數。實際上,新浪微博官方給我們提供API獲取微博數據,可這個API可以獲取的微博數據非常有限,更讓人難以接受的是新浪微博的應用授權方式,如果我們採用調用API的方式,在這裡會有第三次POST請求,有朋友分析了完整的模擬登錄過程,可我對此表示毫無興趣啊。最早我採用了模擬這種方式,抓取第一頁的時候還是登錄的狀態,可等到抓取第二頁的時候變成了註銷的狀態,整個過程使用的是同一個session對象,所以我最後果斷放棄了這種方式。
好了,現在我們只需要在Chrome里F12找到Network選項卡,抓一次包取得cookie,然後在請求的時候帶上cookie即可。我們不用過分擔心cookie過期的問題,在博主測試的時候,一個cookie可以持續工作3至5天,而且在後面我們會講到,這個爬蟲抓取的數據量其實並不大,在一兩個小時內就可以完成抓取,沒有必要將爬蟲考慮得太嚴謹。在下圖中我們標記出了博主計算機上存儲的cookie,我們通過cookie就可以免登錄抓取信息啦。
解決登錄的問題以後,回到這個問題本身,我們需要抓取[@西安月老牽線](Sina Visitor System)發布的所有微博,移動版對微博做了分頁處理,所以我們只需要知道總共有多少頁,然後循環去提取每一頁里的信息即可,因為我們注意到每一頁的地址都符合[登錄 - 新浪微博](登錄 - 新浪微博)這樣的形式。首先頁數,我們可以通過name為mp的隱藏控制項來獲得,其value屬性表示總頁數。其次,每條微博存放在class為c,id以M_開頭的div標籤里,在這裡我們只需要文本信息,順藤摸瓜我們發現信息被存放在class為ctt的span標籤里,這裡博主遇到一個奇怪的問題,BeautifulSoup默認的解析器html.parser,不知道因為原因無法解析出標籤,而lxml當時因為pip的問題無法安裝,所以不能使用XPath來解析DOM解構,在這裡我認為XPath更適合這個場景,如果有時間可以考慮對代碼進行重構。
在抓取微博的過程中,博主發現官方的反爬蟲策略非常給力,連續工作超過5分鐘IP就會被封鎖,進而無法訪問微博的伺服器, 大概經過20至30分鐘後會自動解封。或許主流的方案是花錢買動態代理,可我這個就是臨時起意的一個想法,所以我採取了最簡單粗暴的方法,讓線程睡一會兒,在這樣條件下,我花了大概1個半小時到2個小時左右的時間,從微博上抓取了5600條數據,並將其存儲在了SQLite資料庫中。什麼?你問我為什麼不考慮多線程,因為我這個人懶啊,這個問題最難的地方在數據分析,數據抓取方面我不太關注效率,因為我有足夠的時間去等這些數據,所以關於性能方面的問題,有時間我們再做進一步討論吧!
數據處理過程
數據處理這塊,我本來打算嘗試下MongoDB這個資料庫的,而實際上這是我今年計劃要去學習的內容之一,後來因為種種原因一直擱置到現在,可當我注意到Windows下安裝MongoDB的繁瑣後,我果斷放棄了這種念頭回歸簡單的SQLite,我基本上是交叉使用Windows和Linux,而我知道Linux下安裝MongoDB是非常簡單的。我反覆強調我喜歡小而美的東西,就是因為我想保留對方案的選擇權。在這裡我們的數據處理,主要是數據清洗和中文分詞。首先,我們來一起看看資料庫表的設計:
我這裡一切從簡,所以將這5600多條數據都存儲在一張表裡,表中有四個欄位ID、Post、Wish和Tags。顯然,ID是自增的主鍵,為每條微博提供一個唯一的標識;Post存儲我們從微博上抓取的原始信息,這裡不含HTML標籤,可是會含有微博表情字元啊摔;Wish存儲每條微博中對伴侶的要求具體有哪些,這裡我們主要通過關鍵字來截取可謂簡單粗暴,具體原因稍後會講到:);Tags存儲Wish欄位經過分詞以後的結果,這裡我們使用結巴分詞和SnowNLP,該欄位中存儲的是序列化後的JSON字元串,下面我們具體來講這些欄位的處理。
首先,分析[@西安月老牽線](Sina Visitor System)發布的微博我們可以發現,所有徵婚相關的微博都是以**#徵婚交友#**或者**#月老愛牽線#**這樣的話題開始,並且每條微博都是先介紹個人情況,然後再描述對理想伴侶的期望,所以我們只需要找出每條微博里對理想伴侶的期望相關的描述,然後再根據這條微博是由**男嘉賓**還是**女嘉賓**發布的,即可匯總出男、女性對各自伴侶的期望到底是什麼,我們將這部分信息更新在Wish欄位里,我們一起來看具體的代碼:
```
# Filter Data
sql = "SELECT ID, Post FROM table_weibo WHERE POST LIKE %%%%%s%%%% OR POST LIKE %%%%%s%%%%"
sql = sql % (u#徵婚交友#,U#月老愛牽線#)
self.cursor.execute(sql)
rows = self.cursor.fetchall()
# Adjust Data
patterns = [想找,希望找,要求,希望另一半,擇偶標準,希望對方,
希望,找一位,找一個,一半,找,想,喜歡,擇偶條件,尋,期待,
女孩,男孩,女生,男生,女士,男士,理想型]
sql = "UPDATE table_weibo SET Wish = ? WHERE ID = ?"
for row in rows:
id = row[0]
post = row[1]
match = -1
for pattern in patterns:
if(pattern in post):
match = post.find(pattern) + len(pattern)
break
if(match != -1):
wish = str(post[match:])
wish = wish.replace(#西安月老牽線#,)
wish = wish.replace([心]@月老蜀黍 ,)
wish = wish.replace(#月老愛牽線# ,)
self.cursor.execute(sql,(wish,id))
else:
self.cursor.execute(sql,(,id))
self.connect.commit()
```
可以注意到,我們首先按照話題對微博進行了篩選,然後通過關鍵字列表patterns來截取我們所需要的Wish欄位,實際上這裡是需要反覆去調整patterns的,直到所有滿足我們期望的數據都被提取出來,所以這是一個漸進式的數據處理過程。或許我們能想到通過NLP相關的技術來分析這段文本,我嘗試通過SnowNLP去分析這樣一段長度為100到500的文本,因為SnowNLP具備分析一段話的摘要及關鍵字的能力。可我發現這樣實踐下來效果並不太好,這是因為SnowNLP本身是以電商網站的評論數據為基礎的,所以遇到我們微博這樣相對靈活的文本信息時,它提取出的關鍵字並不能完全地符合我們的期望。固然,我們可以通過訓練SnowNLP來達到我們的目的,可訓練需要準備大量的文本信息作為支撐。作為一個懶惰的人,我最終選擇了通過關鍵字來提取關鍵信息,準確度基本可以保證90%以上,因為暴力截取難免會拆分出不符合期望的信息。
接下來,我們有了針對男、女擇偶要求期望的Wish欄位,可這些信息對我們而言,依然顯得繁重而冗餘,所以接下來我們考慮對Wish欄位進行分詞,最初的設想是通過詞性和語法來分析,可當我分完詞以後我就不得不佩服中文的博大精深,這裡我選擇了兩個中文處理相關的庫,即[結巴分詞](fxsjy/jieba)和[SnowNLP](fxsjy/jieba),它們都是開源項目並且有大量的文檔作為參考,這裡想說的是,SnowNLP中支持中文文本的情感分析,這是我最初想要使用這個庫的一個重要原因,因為我想從這些微博中找出評價一個人的形容詞或者名詞,而這些詞的情感分析,可以作為我們是否將其作為一個評價指標的重要依據。
可我們有句話叫做「認真你就輸了」,尤其在女性的思維模式中,充滿太多太多不能直接去理解的信息。這種我不用舉例子啦,現在鋪天蓋地的直男癌/女權癌席捲而來,其實有太多問題無關對錯,你輸就輸在沒有照顧好對方的情緒,我們現在常常把情商掛在嘴上,可情商概念中的**自我意識**、**控制情緒**、**自我激勵**、**認知他人情緒**和**處理相互關係**,有60%說的是自我管理,而其餘的40%,恰恰就是我們日常理解中關於人際關係方面的,所以我們說人工智慧不能完全代替人類,因為只有絕對理性的世界是恐怖的,可只有情緒化的感情而不講道理的世界則是空虛的。我們可以去追逐人類內心中的靈性,即真、善、美,這是任何冰冷的計算機所不具備的東西。可我們能不能真誠一點呢,明明知道這一切都是套路可你還滿心期待,我們並非不懂得什麼是愛,愛不是我用一個又一個套路去套路你,而是我明知這是套路還願意陪你表演下去,我沒有在諷刺浙江衛視某節目,願溫柔的你被這個世界溫柔地對待。
關於結巴分詞和SnowNLP地對比評測,大家可以參考:[Python︱六款中文分詞模塊嘗試](python︱六款中文分詞模塊嘗試:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP - CSDN博客),這裡博主發現SnowNLP適合做大顆粒分詞拆分,而結巴分詞適合做小顆粒分詞拆分。其實,從分詞效果上來講,結巴分詞是要比SnowNLP效果更好一些的,可我這樣說不是會顯得情商比較高嗎?這樣你們會喜歡嗎?最終我們採取的方案是兩者混用,故而我們有了這樣的代碼:
```
def generateTags(self,text):
snow = SnowNLP(text)
sentences = snow.tags
tags = []
for s in sentences:
words = pseg.cut(s[0])
for w in words:
tags.append({word:w.word,flag:w.flag})
return json.dumps(tags)
```
可以注意到,這裡我們使用結巴分詞獲得了每個詞的詞性,不過到我寫這篇文章的時候,對於詞性的處理我依然沒有什麼好的想法,這裡僅將其作為結果以JSON的形式存儲到資料庫中,現在我們基本上完成了所有數據處理的流程,在這個過程中會有些特殊的中文字元,我們採取暴力替換的方式進行去除即可,對此不在這裡展開說啦。下圖展示了資料庫中部分數據:
處理結果呈現
說起這篇文章,可以說這是我第一次接觸數據分析,我們這個時代積累了大量的數據,所以我們有基於大數據的推薦和預測等等相關場景,知乎和微博的首頁Feed流經過無數次演算法調整,可人們依然在抱怨演算法向人們推薦了無關的內容,這是否說明,我們所期待的智能,僅僅是讓我們覺得智能而已,這一系列基於統計的數據分析理論,是否一定是符合某種冥冥之中的規則,我想起《模仿遊戲》中和卷福扮演的圖靈形成鮮明對比的,正是以休.壓力山大為代表的統計方法派,電影中他們試圖通過分析字母出現的頻率來破解恩尼格瑪。對於數據分析而言,如果說可視化是面向人類的分析手段,那麼數據挖掘就是面向機器的分析手段。作為一個剛剛入門的萌新,我描述的是我對數據分析的一種感覺。回到本文主題,這裡我選擇以詞雲作為最終處理結果的呈現載體。、
詞雲,即WordCloud,是一種展現關鍵字出現頻率的表達方式,如果你對博客寫作比較熟悉的話,就會知道諸如WordPress、Ghost、Hexo等都提供了標籤雲功能,我們每篇文章中都會給文章添加若干標籤,而標籤基本可以讓讀者了解這個博客都有哪些內容,在標籤雲中出現頻率越高的標籤其字體通常會越大,這樣我們可以非常直觀地了解到,每個因素在整體上佔到的比重。本文之所以採用這種方案,正是希望通過詞雲來呈現男女在擇偶觀上更看重什麼。生成詞雲的方式有很多,具體可以參考這篇文章:[除了 Tagxedo外,還有什麼好的軟體製作可以詞雲?](小草莓:除了 Tagxedo外,還有什麼好的軟體製作可以詞雲?),而博主最終選擇了[wordcloud](amueller/word_cloud),你可以看到Python基本上是萬能的語言,有這麼多優秀的第三方庫可以用,我就問你怕不怕,關於這個庫的用法,請參考:[word clouds in Python](word clouds in Python),如果通過pip無法直接安裝該庫,可以通過[這裡](Python Extension Packages for Windows)下載.whl文件進行安裝,注意升級pip到最新版本即可。
參照官方的示例,我們從資料庫中根據Post來過濾性別,根據Tags來獲取關鍵字,然後將所有Tags串聯成一個字元串,傳遞給WordCloud模塊即可。下面給出代碼片段:
```
# Filter Data
sql = "SELECT Post, Tags FROM table_weibo WHERE Tags <> "
self.cursor.execute(sql)
rows = self.cursor.fetchall()
# Filter Tags
male_tags =
female_tags =
for row in rows:
post = row[0]
tags = json.loads(row[1])
if u男嘉賓[向右] in post:
female_tags += ,.join(map(lambda x:x[word],tags))
elif u女嘉賓[向右] in row[0]:
male_tags += ,.join(map(lambda x:x[word],tags))
# WordCloud self.generateWordCloud(female_tags,female.png,output_female.png) self.generateWordCloud(male_tags,male.png,output_male.png)
```
在這裡我們主要將男嘉賓/女嘉賓分別篩選出來,然後將分詞結果用逗號串聯起來,這樣即可得到male_tags和female_tags,我們會將其傳遞給WordCloud模塊,可以注意到我們為男性/女性詞雲分別設置了不同的背景圖片,最終會生成兩張不同的圖片,這裡主要參考了[Image-colored](Image-colored wordcloud)這個示例,代碼片段展示如下:
```
def generateWordCloud(self,text,background,output):
back_coloring = np.array(Image.open(background))
stopwords = set(STOPWORDS)
stopwords.add(u西安)
stopwords.add(u生活)
wordcloud = WordCloud(
font_path=simfang.ttf, # 設置字體
background_color="white", # 背景顏色
max_words=5000, # 詞雲顯示的最大詞數
mask=back_coloring, # 設置背景圖片
stopwords=stopwords, #停用詞設置
max_font_size=75, # 字體最大值
random_state=42,
width_=1000, height=860, margin=15,# 設置圖片默認的大小,但是如果使用背景圖片的話,那麼保存的圖片大小將會按照其大小保存,margin為詞語邊緣距離
)
wordcloud.generate(text)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
wordcloud.to_file(output)
```
  這裡我們注意到添加了兩個停止詞,這是因為我們發現,**西安**和**生活**這兩個關鍵詞,在整體中所佔權重雖然較高,可是因為我們這裡抓取的是西安本地的微博,所以這兩個關鍵詞對我們而言是沒有意義的。再對這兩個關鍵字進行剔除以後,我們最終生成的詞雲如圖:
這是個看臉的世界
對這樣一個顯然成立的結論,我是表示失望的,這種感覺像什麼呢?就像你期待著對方說喜歡你,結果到最後她還是會說我們不合適。可花費如此大的篇幅來講這樣一個悲傷的故事,我們就象徵性地分析下結論吧!首先,我們注意到男性心目中的伴侶,排名靠前關鍵字是**性格**、**孝順**、**善良**、**懂事**、**結婚**、**身高**、**眼緣**,而女性心目中的伴侶,排名靠前的關鍵字是**身高**、**穩重**、**責任心**、**上進心**、**工作**、**成熟**。所以,我現在完全可以理解,為什麼女生會對180的身高如此迷戀,因為她們想被男朋友舉高高呀,我的一位朋友如是說。
與此同時,我們發現很多指標譬如**孝順**、**善良**、**穩重**、**責任心**、**上進心**等,其實都是需要兩個人在相處久了以後慢慢去驗證的,可這些最終會被**眼緣**和**身高**這種因素阻擋在外面。或許你會覺得這樣淺顯的道理,居然值得我花費時間和精力去思考。一個你吸引不到的人,終究是難以拉近兩個人心間的距離的。喜歡是兩個人的事情,我不是要卑微地乞求你來見我,而是你想要來見我我就主動迎上去。有天在QQ空間看到有人在看《怦然心動》,就忍不住下載下來一個人看。有時候我們喜歡的那個人,或許並沒有那麼好,你會漸漸發現,那種因為喜歡而附加在對方身上的光環,會隨著時光而慢慢變淡。而有那麼一瞬間,我只想比她變得更優秀,而不再幻想她會轉身回來看我,或許這就是成長吧!
本文小結
大概沒有誰會像我這樣,在寫一篇技術文章的過程中,摻雜如此多的個人情感。可有時候,一個人做一件事情的動機,的確就是如此簡單。我羨慕175以上的身高,可是不是我具備了這樣的身高,你就會喜歡我呢?我想應該不會吧,因為你總能找到新的理由來拒絕我。所以,我寫這篇文章,通過Python抓取新浪微博數據並對其進行分析,並不是想告訴你,你因為不具備哪些因素而不被人喜歡,而是想告訴你,我們每一個人都是這個世界上獨一無二的存在,我們的優點同我們的缺點組合起來,這才是完整的我們。別人喜歡不喜歡我們到底有什麼意義呢?就像我們喜歡許嵩、喜歡林依晨,難道就要讓人家喜歡我們嗎?我可以非常喜歡你,但我一定要驕傲地喜歡你,因為我驕傲時的樣子最帥,誰讓這是一個看臉的世界呢?
推薦閱讀:
※Python操作MySQL資料庫安全嗎?
※用腳本構建的程序是怎麼保持後期重構的健壯性的?
※500lines.crawler源碼分析-基於asyncio和aiohttp寫一個爬蟲
※馬哥培訓,無恥的抄襲。
※數據挖掘進階:kaggle競賽top代碼分享