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


    大家好,我是辣条。

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

    采集数据目标

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

    工具使用

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

    重点内容学习

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

    前言

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

    项目思路解析

    控制selenium登录QQ空间

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

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

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

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

    简易源码展示

    1. import json
    2. import re
    3. from selenium import webdriver
    4. import time
    5. def getGTK(cookie):
    6. hashes = 5381
    7. for letter in cookie['p_skey']:
    8. hashes += (hashes << 5) + ord(letter)
    9. return hashes & 0x7fffffff
    10. # 封装函数的关键字
    11. def start_spider():
    12. driver = webdriver.Chrome()
    13. driver.get("https://i.qq.com/")
    14. driver.switch_to.frame('login_frame')
    15. # time.sleep(10)
    16. driver.find_element_by_id('bottom_qlogin').click()
    17. # time.sleep(5)
    18. driver.find_element_by_name('u').clear()
    19. driver.find_element_by_name('u').send_keys('qq号')
    20. # time.sleep(5)
    21. driver.find_element_by_name('p').clear()
    22. driver.find_element_by_name('p').send_keys('qq密码')
    23. driver.find_element_by_id('login_button').click()
    24. time.sleep(2)
    25. cookie = {}
    26. for i in driver.get_cookies():
    27. cookie[i['name']] = i['value']
    28. gtk = getGTK(cookie)
    29. 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(
    30. gtk) + '&qzonetoken=e794139a284d6ea9e0b26826e541b55df37d0667a3544f534de25aebdb64628d3ab75e1d7104bbb22a' + '&g_tk=' + str(
    31. gtk))
    32. time.sleep(4)
    33. friend_list = driver.page_source
    34. # print(friend_list)
    35. abtract_pattern = '''"(.*?)":{
    36. "realname":"(.*?)"}'''
    37. qq_name_list = re.findall(abtract_pattern, str(friend_list)) # 数组
    38. print(qq_name_list)
    39. for qq_info in qq_name_list:
    40. qq_num = qq_info[0]
    41. qq_name = qq_info[1]
    42. if qq_num == "对方QQ号": # 我只获取了一个
    43. count = 0
    44. begin = 0
    45. 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(
    46. begin) + '&num=40&replynum=200&g_tk=' + str(
    47. gtk) + '&callback=_preloadCallback&code_version=1&format=jsonp&need_private_comment=1&qzonetoken=e794139a284d6ea9e0b26826e541b55df37d0667a3544f534de25aebdb64628d3ab75e1d7104bbb22a&g_tk=' + str(
    48. gtk))
    49. msg_json = driver.page_source
    50. # print(msg_json)
    51. msg_json_list = re.findall('_preloadCallback\((.*?)\);', str(msg_json))
    52. print(msg_json_list)
    53. data = json.loads(msg_json_list[0])
    54. # print(data)
    55. for text in data['msglist']:
    56. content = text['content']
    57. createTime = text['createTime']
    58. f = open("shuoshuo.text", "a", encoding="utf-8")
    59. f.write('{},{},{},{}\n\n'.format(qq_num, qq_name, createTime, content))
    60. start_spider()

    效果图展示

     

     

    结尾

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

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

  • 相关阅读:
    打开深度学习的锁:(2)单隐藏层的神经网络
    质疑苹果5G信号造假成为闹剧,反而将运营商置于尴尬境地
    java计算机毕业设计网上超市系统源码+系统+数据库+lw文档+mybatis+运行部署
    opencv基本的图像处理
    Altium Designer 常见问题解答
    vue3的单组件的编写(二)--通过对比vue2来讲解
    tcp/ip协议2实现的插图,数据结构2 (9 - 章)
    Java基础3(操作数组的工具类(java.util.Arrays),java数组中的常见异常)
    OpenCV常用功能——灰度处理和图像二值化处理
    如何实现基于场景的接口自动化测试用例?来看看大佬的方案
  • 原文地址:https://blog.csdn.net/AI19970205/article/details/118118151