二进制记得

二进制记得

【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. 打开chrome开发者工具,注意数据来源,而不是直接对页面解析
    这里写图片描述
    这里写图片描述
    这里写图片描述

  3. 最后数据存入MongoDB,以字典类型直接插入,与mysql相比,MongoDB直接爽快
    这里写图片描述

  4. 查看网页源码,可以直接找到qzonetoken值
    这里写图片描述

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

最后

这里写图片描述

结果是比较满意的,然而稍微有点问题的是,QQ空间显示的是711条说说,但爬下来只有678,我对照过开头以及结尾数十条说说,都能对得上,估计是中间哪里出错了,抓取率只达到了95.5%。还有需要改进的地方。

完整代码已上传GitHub,点击可查看。

猜你喜欢

转载自blog.csdn.net/qq_41359051/article/details/80808242