二進制記得

  • 二進制記得
  • 【1】
  • 【2】
  • 【3】
  • 目標
  • 工具
  • 思路
  • 注意事項
  • 最後

【1】

你知不知道,那些交錯在互聯網上的數據,都以0或1的樣貌,真實存在這世界的某個角落。

【2】

小思跟我説她喜歡一個男生十年了。

“啊?”,我一個沒穩住,五花肉抱着重力加速度就往下墜。
“其實不確定啦……”,小思突然笑起來,但空氣裏完全感覺不到令人欣喜的因子,“前幾年或許喜歡來着,到後來怎麼一回事兒,自己竟也不知道。”

小思不是那種人。我倒並非否定她是“人”的存在,而是認識多年,她對什麼都不上心,無意花花草草。我以為她在等意中人——妖出現。聽説這類型泰國也多,她死活宅又窮,買不起機票,周邊又沒遇見過——這我能擔保,所以我的“以為”才一直沒被打破。新放的五花肉又開始雀躍了,伸展腰肢企圖誘我上鈎,一會子芳香四溢。竹筷伸了過去。

“嘿我説你這人怎麼這樣啊,有沒有同情心啊,聽到這麼悲傷的故事還吃得下去?”
“哪裏悲傷啦?”
“哪裏不悲傷啦?”,小思覺着語氣不夠強烈,進一步咄咄逼人:“啊?啊?啊?”

五花肉是吃不上了。我伸手持平,一個“請”的姿態;腦袋前驅,側揚右耳,表示洗耳恭聽。

“那時候QQ空間很流行,什麼話都在裏頭説,你是知道的吧?”,我確信剛剛語句裏有疑問的成分但小思沒為我準備應答的時間,“好友買賣搶車位大家都玩,你知不知道,有次他被人買去了,我沒發現,他居然生氣了……”

小思越往後説,越眉開眼笑,鎖骨拉出一條水平線。她向來黑,又瘦,我一度認為我們之所以能友誼天長地久,是因為看彼此從頭到腳都醜。而此刻,我竟覺得她很好看起來。

“……哪裏想到他是那樣的人嘛。還吃醋,斤斤計較……”

小思心情似乎轉好,可我的狀態背道而馳。五花肉大概要成油渣了吧,卻仍舊挑釁我的嗅覺,迫使我一次次拼命咽口水。真實暴殄天物啊!

突然一絲與上文氛圍極不相稱的聲音降下來,飄渺得彷彿穿山越嶺之後,彷彿並非要説與我聽。
“……他都不記得了吧,那些我們敲打的字,一行行排布在QQ空間裏,我偶爾也去看的……可他不記得了吧……”

我忙拾起目光,視線裏是小思垂下的頭,將所有線索隱藏在劉海之後。

【3】

他忘了?
沒關係,二進制幫他記得。


目標

爬取男/女神QQ空間裏的説説。但我女神的説説是沒辦法爬啦,所以這裏找個平時話比較多的朋友來替代吧。

工具

IED:pycharm
模塊:selenium,mongodb(負責存儲數據)
瀏覽器:chrome(記得需要下載相關驅動chromedriver.exe

思路

  1. 利用selenium操縱谷歌瀏覽器自動登陸QQ空間獲取cookies值
  2. 利用requests庫向QQ説説的API接口請求數據

注意事項

  1. 注意QQ空間的登陸地址不是第一圖,仔細分析,發現登陸界面是用的iframe框架,這是前端的一個知識。可以這樣認為,這是在一個頁面上鑲嵌了另一個頁面的數據
  2. yu鏡像_數據


  3. yu鏡像_ide_02


  4. yu鏡像_chrome_03

  5. 打開chrome開發者工具,注意數據來源,而不是直接對頁面解析
  6. yu鏡像_ide_04


  7. yu鏡像_chrome_05


  8. yu鏡像_ide_06

  9. 最後數據存入MongoDB,以字典類型直接插入,與mysql相比,MongoDB直接爽快
  10. yu鏡像_yu鏡像_07

  11. 查看網頁源碼,可以直接找到qzonetoken值
  12. yu鏡像_chrome_08

  13. g_tk需要一定的計算,這裏我是通過強大網友幫的忙,實現算法
  14. yu鏡像_ide_09

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
  1. 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

最後

yu鏡像_chrome_10

結果是比較滿意的,然而稍微有點問題的是,QQ空間顯示的是711條説説,但爬下來只有678,我對照過開頭以及結尾數十條説説,都能對得上,估計是中間哪裏出錯了,抓取率只達到了95.5%。還有需要改進的地方。

完整代碼已上傳GitHub,點擊可查看。