携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
大家好,我是辣条。
室友知道了我上次给班花修过电脑,追了我三条街,嘴里大骂我不当人子,怪我这种事情没带他。最后又舔着脸求我支招,这货竟然想追班花!辣条我为了兄弟两(收)肋(钱)插(办)刀(事),毫不犹豫的答应了。但是我只有班花的QQ和微信怎么办呢,那就从她平时发的动态着手,于是就有了这篇文章,不过最后我又发现了她的另一秘密!
采集数据目标 网址:QQ空间
工具使用 开发环境:win10、python3.7 开发工具:pycharm、Chrome 工具包:selenium,re,time
重点内容学习 selenium使用 -gtk的加密方式 -数据信息的获取
前言 selenium为测试工具需要先配置安装驱动 博主用的是chorme浏览器,下载chormedrive 驱动下载地址驱动下载地址 下载完成之后将驱动exe放到Python安装目录
项目思路解析 控制selenium登录QQ空间
获取到好友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()
# time.sleep(10)
rver.find_element_by_id('bottom_qlogin').click()
# time.sleep(5)
driver.fnd_element_by_name(u').clear()
driver.find_element_by_name('u').send_keys('qq号')
iver.find_element_by_name('p').clear() driver.find_element_by_na('p').send_keys('qq密码') driver.find_element_by_id('login_button').click() time.sleep(2) cookie = {}
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("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 = {}
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
start_spider()
start_spider()
效果图展示
结尾 我成功的把班花空间的数据爬取下来了,主要还是说说的内容,通过她的说说我竟然发现了她喜欢王俊凯,而且还是铁粉的那种,这下我室友是没戏了,哎可怜的娃儿...
PS:纯属技术交流学习,抓取的都是公开数据,没有进行非法牟利获取,最后室友转给我的钱请他吃饭喝酒去了【谁都有过这时候】,最后提醒大家,不要利用爬虫进行违规违法操作,一定要遵纪守法!