二進制記得
- 二進制記得
- 【1】
- 【2】
- 【3】
- 目標
- 工具
- 思路
- 注意事項
- 最後
【1】
你知不知道,那些交錯在互聯網上的數據,都以0或1的樣貌,真實存在這世界的某個角落。
【2】
小思跟我説她喜歡一個男生十年了。
“啊?”,我一個沒穩住,五花肉抱着重力加速度就往下墜。
“其實不確定啦……”,小思突然笑起來,但空氣裏完全感覺不到令人欣喜的因子,“前幾年或許喜歡來着,到後來怎麼一回事兒,自己竟也不知道。”
小思不是那種人。我倒並非否定她是“人”的存在,而是認識多年,她對什麼都不上心,無意花花草草。我以為她在等意中人——妖出現。聽説這類型泰國也多,她死活宅又窮,買不起機票,周邊又沒遇見過——這我能擔保,所以我的“以為”才一直沒被打破。新放的五花肉又開始雀躍了,伸展腰肢企圖誘我上鈎,一會子芳香四溢。竹筷伸了過去。
“嘿我説你這人怎麼這樣啊,有沒有同情心啊,聽到這麼悲傷的故事還吃得下去?”
“哪裏悲傷啦?”
“哪裏不悲傷啦?”,小思覺着語氣不夠強烈,進一步咄咄逼人:“啊?啊?啊?”
五花肉是吃不上了。我伸手持平,一個“請”的姿態;腦袋前驅,側揚右耳,表示洗耳恭聽。
“那時候QQ空間很流行,什麼話都在裏頭説,你是知道的吧?”,我確信剛剛語句裏有疑問的成分但小思沒為我準備應答的時間,“好友買賣搶車位大家都玩,你知不知道,有次他被人買去了,我沒發現,他居然生氣了……”
小思越往後説,越眉開眼笑,鎖骨拉出一條水平線。她向來黑,又瘦,我一度認為我們之所以能友誼天長地久,是因為看彼此從頭到腳都醜。而此刻,我竟覺得她很好看起來。
“……哪裏想到他是那樣的人嘛。還吃醋,斤斤計較……”
小思心情似乎轉好,可我的狀態背道而馳。五花肉大概要成油渣了吧,卻仍舊挑釁我的嗅覺,迫使我一次次拼命咽口水。真實暴殄天物啊!
突然一絲與上文氛圍極不相稱的聲音降下來,飄渺得彷彿穿山越嶺之後,彷彿並非要説與我聽。
“……他都不記得了吧,那些我們敲打的字,一行行排布在QQ空間裏,我偶爾也去看的……可他不記得了吧……”
我忙拾起目光,視線裏是小思垂下的頭,將所有線索隱藏在劉海之後。
【3】
他忘了?
沒關係,二進制幫他記得。
目標
爬取男/女神QQ空間裏的説説。但我女神的説説是沒辦法爬啦,所以這裏找個平時話比較多的朋友來替代吧。
工具
IED:pycharm
模塊:selenium,mongodb(負責存儲數據)
瀏覽器:chrome(記得需要下載相關驅動chromedriver.exe)
思路
- 利用selenium操縱谷歌瀏覽器自動登陸QQ空間獲取cookies值
- 利用requests庫向QQ説説的API接口請求數據
注意事項
- 注意QQ空間的登陸地址不是第一圖,仔細分析,發現登陸界面是用的iframe框架,這是前端的一個知識。可以這樣認為,這是在一個頁面上鑲嵌了另一個頁面的數據
-
-
- 打開chrome開發者工具,注意數據來源,而不是直接對頁面解析
-
-
- 最後數據存入MongoDB,以字典類型直接插入,與mysql相比,MongoDB直接爽快
- 查看網頁源碼,可以直接找到qzonetoken值
- g_tk需要一定的計算,這裏我是通過強大網友幫的忙,實現算法
def get_gtk(cookie):
"""
獲取QQ空間GTK算法
:param cookie:
:return:
"""
hashes = 5381
for letter in cookie['p_skey']:
hashes += (hashes << 5) + ord(letter)
return hashes & 0x7fffffff
- msglist中content字段一定存在,而pic(圖片),video(視頻)不一定存在,所以需要做一些判斷來處理一下處理
for item in data["msglist"]:
pics = []
videos = []
# 如果説説為空,用內“null”填充,否之則取出
if not item["content"]:
dic["content"] = "null"
else:
dic["content"] = item["content"]
# 用時間戳設置_id字段
dic["_id"] = item["created_time"]
# 將時間戳轉換“某年-某月-某日 時:分:秒”格式
dic["time"] = time.strftime("%Y-%m-%d %H:%M:%S", \
time.localtime(int(item["created_time"])))
# 如果照片存在,如果視頻存在,取出,否則用“null”填充
if "pic" in item.keys():
for picture in item["pic"]:
pics.append(picture["url3"])
dic["picture"] = pics
else:
dic["picture"] = "null"
if "video" in item.keys():
for video in item["video"]:
videos.append(video["url3"])
dic["video"] = videos
else:
dic["video"] = "null"
yield dic
最後
結果是比較滿意的,然而稍微有點問題的是,QQ空間顯示的是711條説説,但爬下來只有678,我對照過開頭以及結尾數十條説説,都能對得上,估計是中間哪裏出錯了,抓取率只達到了95.5%。還有需要改進的地方。
完整代碼已上傳GitHub,點擊可查看。