我用Python采集了班花的空间数据集,除了美照竟然再一次发现了她另外的秘密![通俗易懂]

大家好,我是辣条。室友知道了我上次给班花修过电脑,追了我三条街,嘴里大骂我不当人子,怪我这种事情没带他。最后又舔着脸求我支招,这货竟然想追班花!辣条我为了兄弟两(收)肋(钱)插(办)刀(事),毫不犹豫的答应了。但是我只有班花的QQ和微信怎么办呢,那就从她平时发的动态着手,于是就有了这篇文章,不过最后我又发现了她的另一秘密!采集数据目标网址:QQ空间工具使用开发环境:win10、python3.7开发工具:pycharm、Chrome工具包:selenium,re,time.

大家好,又见面了,我是你们的朋友全栈君。

大家好,我是辣条。

室友知道了我上次给班花修过电脑,追了我三条街,嘴里大骂我不当人子,怪我这种事情没带他。最后又舔着脸求我支招,这货竟然想追班花!辣条我为了兄弟两(收)肋(钱)插(办)刀(事),毫不犹豫的答应了。但是我只有班花的QQ和微信怎么办呢,那就从她平时发的动态着手,于是就有了这篇文章,不过最后我又发现了她的另一秘密!

我用Python采集了班花的空间数据集,除了美照竟然再一次发现了她另外的秘密![通俗易懂]

采集数据目标

网址:QQ空间在这里插入图片描述

工具使用

开发环境:win10、python3.7 开发工具:pycharm、Chrome 工具包:selenium,re,time

重点内容学习

  • selenium使用 -gtk的加密方式 -数据信息的获取

前言

selenium为测试工具需要先配置安装驱动 博主用的是chorme浏览器,下载chormedrive 驱动下载地址驱动下载地址 下载完成之后将驱动exe放到Python安装目录 在这里插入图片描述

项目思路解析

控制selenium登录QQ空间

    driver = webdriver.Chrome()  # 这个是chormedriver的地址
    driver.get('https://qzone.qq.com/')
    driver.switch_to.frame('login_frame')
    driver.find_element_by_id('switcher_plogin').click()
    driver.find_element_by_id('u').clear()
    driver.find_element_by_id('u').send_keys("QQ号")  
    driver.find_element_by_id('p').clear()
    driver.find_element_by_id('p').send_keys(“QQ密码”)  
    driver.find_element_by_id('login_button').click()
    time.sleep(2)

获取到好友QQ昵称以及QQ名称 在这里插入图片描述 g_tk为加密参数找到加密方法 在这里插入图片描述在这里插入图片描述 g_tk值为cookie值进行加密获取p_skey的值进行加密 在这里插入图片描述 通过selenium提取到当前网页的cookie值 在这里插入图片描述 Python解密代码

def getGTK(cookie):
    hashes = 5381
    for letter in cookie['p_skey']:
        hashes += (hashes << 5) + ord(letter)
    return hashes & 0x7fffffff
cookie = {}  # 初始化cookie字典
for elem in driver.get_cookies():  # 取cookies
    cookie[elem['name']] = elem['value']
gtk = tool.getGTK(cookie)  # 通过getGTK函数计算gtk
​

获取到好友的QQ号的方法有很多,只有能提取到就行 获取好友说说信息的链接 在这里插入图片描述 获取到链接的数据信息 在这里插入图片描述

简易源码展示

import json
import re
from selenium import webdriver
import time


def getGTK(cookie):
    hashes = 5381
    for letter in cookie['p_skey']:
        hashes += (hashes << 5) + ord(letter)
    return hashes & 0x7fffffff

# 封装函数的关键字
def start_spider():
    driver = webdriver.Chrome()
    driver.get("https://i.qq.com/")
    driver.switch_to.frame('login_frame')
    # time.sleep(10)
    driver.find_element_by_id('bottom_qlogin').click()
    # time.sleep(5)
    driver.find_element_by_name('u').clear()
    driver.find_element_by_name('u').send_keys('qq号')
    # time.sleep(5)
    driver.find_element_by_name('p').clear()
    driver.find_element_by_name('p').send_keys('qq密码')
    driver.find_element_by_id('login_button').click()
    time.sleep(2)
    cookie = {}

    for i in driver.get_cookies():
        cookie[i['name']] = i['value']

    gtk = getGTK(cookie)
    driver.get('https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_hat_get.cgi?hat_seed=1&uin=1727948159fupdate=2&g_tk=' + str(
            gtk) + '&qzonetoken=e794139a284d6ea9e0b26826e541b55df37d0667a3544f534de25aebdb64628d3ab75e1d7104bbb22a' + '&g_tk=' + str(
            gtk))
    time.sleep(4)
    friend_list = driver.page_source
    # print(friend_list)
    abtract_pattern = '''"(.*?)":{
"realname":"(.*?)"}'''
    qq_name_list = re.findall(abtract_pattern, str(friend_list))  # 数组
    print(qq_name_list)
    for qq_info in qq_name_list:
        qq_num = qq_info[0]
        qq_name = qq_info[1]
        if qq_num == "对方QQ号": # 我只获取了一个
            count = 0
            begin = 0

            driver.get('https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=' + qq_num + '&ftype=0&sort=0&pos=' + str(
                        begin) + '&num=40&replynum=200&g_tk=' + str(
                        gtk) + '&callback=_preloadCallback&code_version=1&format=jsonp&need_private_comment=1&qzonetoken=e794139a284d6ea9e0b26826e541b55df37d0667a3544f534de25aebdb64628d3ab75e1d7104bbb22a&g_tk=' + str(
                        gtk))

            msg_json = driver.page_source
            # print(msg_json)
            msg_json_list = re.findall('_preloadCallback\((.*?)\);', str(msg_json))
            print(msg_json_list)
            data = json.loads(msg_json_list[0])
            # print(data)
            for text in data['msglist']:
                content = text['content']
                createTime = text['createTime']
                f = open("shuoshuo.text", "a", encoding="utf-8")
                f.write('{},{},{},{}\n\n'.format(qq_num, qq_name, createTime, content))



start_spider()

效果图展示

我用Python采集了班花的空间数据集,除了美照竟然再一次发现了她另外的秘密![通俗易懂]

 

 

我用Python采集了班花的空间数据集,除了美照竟然再一次发现了她另外的秘密![通俗易懂]

我用Python采集了班花的空间数据集,除了美照竟然再一次发现了她另外的秘密![通俗易懂]

结尾

我成功的把班花空间的数据爬取下来了,主要还是说说的内容,通过她的说说我竟然发现了她喜欢王俊凯,而且还是铁粉的那种,这下我室友是没戏了,哎可怜的娃儿…

我用Python采集了班花的空间数据集,除了美照竟然再一次发现了她另外的秘密![通俗易懂]

PS:纯属技术交流学习,抓取的都是公开数据,没有进行非法牟利获取,最后室友转给我的钱请他吃饭喝酒去了【谁都有过这时候】,最后提醒大家,不要利用爬虫进行违规违法操作,一定要遵纪守法!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129063.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 钱柜 自助餐_常熟钱柜KTV是不是有自助餐

    钱柜 自助餐_常熟钱柜KTV是不是有自助餐今天去白石桥钱柜K歌,昔日的钱柜看来确实已老也。之前Javor就说钱柜条件越来越差,亲身体会果然不是一般的差。包房的设施很陈旧,点歌系统土到火星,什么按歌星姓名字数点歌,完全不具操作性。音响还勉强,电

    2022年8月3日
    4
  • 什么,缺“Java项目经验”找不到工作?锋哥送你80个“项目经验”[通俗易懂]

    什么,缺“Java项目经验”找不到工作?锋哥送你80个“项目经验”[通俗易懂]很多学计算机小伙伴从校园刚出来,因为没有项目经验,找工作出出碰壁,尤其是普通大学大专和本科。今天锋哥送80个“Java项目经验”给你,无套路,谢谢;看看下面的“惨剧”就知道:没项目经验,找不到工作没有项目经验,得不到面试机会对于普通大学毕业的大专或者本科生,要想找份好实习单位或者工作,还真得搞点“项目经验”,至少能有面试机会,最终才能有工作机会;经常有应届生找我,说“锋哥啊,给点项目经验啊,实在编不出来”;今天“它来了”,一次性给你80个;(资源来自互联网)截图几个大伙看看:.

    2022年6月12日
    37
  • windows无法连接到打印机错误为0x000000011b_无法连接到打印机错误0000011b

    windows无法连接到打印机错误为0x000000011b_无法连接到打印机错误0000011b最近打印机连不上,查了下网上的资料,发现是Windows10的一个更新bug导致,但是按照网上的方法视乎重启后windows会强制更新,还是无法彻底解决问题。于是在继续查找到相关资料,现在将解决方法记录下来。注意:以下操作只需要在打印机连接的那台电脑上修改即可,其他电脑无需操作一、打开注册表按住win和R键,输入regedit打开注册表二、修改依次打开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe…

    2022年9月10日
    0
  • 用java输出语句_Java的常用输入输出语句

    用java输出语句_Java的常用输入输出语句一、概述输入输出可以说是计算机的基本功能。作为一种语言体系,java中主要按照流(stream)的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流(inputStream),由计算机发出的数据流叫做输出流(outputStream)。Java语言体系中,对数据流的主要操作都封装在java.io包中,通过java.io包中的类可以实现计算机对数据的输入、输出操作。在编…

    2022年7月7日
    20
  • CSS中的媒体类型media type[通俗易懂]

    CSS中的媒体类型media type[通俗易懂]madiatype作用首先要明白一点,我们平时写的HTML页面,可能在不同的媒体类型中显示,如可能显示在屏幕sreen上,也可能显示在纸质print上。那么当页面在不同的媒体类型中显示时,需要的样式可能是不一样的。比如,一般在screen上显示时,页面字体要大一些,在纸质媒体显示时,页面字体要小一些。那么如何告诉别人某个样式是适用于何种媒体类型的呢?这就要靠声明mediatype来实现了。

    2022年5月25日
    89
  • paoding分词TokenStream的使用

    paoding分词TokenStream的使用[code="java"]importjava.io.IOException;importjava.io.StringReader;importnet.paoding.analysis.analyzer.PaodingAnalyzer;importorg.apache.lucene.analysis.Analyzer;importorg.apache.lu…

    2022年7月22日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号