Python爬虫教程:多线程采集QQ空间数据
【Python爬虫教程:多线程采集QQ空间数据】目录
一、前言
二、利用selenium模拟登陆获取cookie并保存到本地
三、破解空间加密参数g_tk
四、在个人QQ空间好友栏获取好友列表
五、获取好友空间说说的json文件 , 获取姓名、说说内容、时间等信息 , 存入数据库
六、开启多线程爬取
七、小结
一、前言玩了这么多年QQ , 学了爬虫当然要爬一下啦 , 肯定有大佬要说爬个QQ空间还要多线程吗 , 人家只是刚看了多线程方面的知识想用一下啦*?(?′?`?)?* 。 第一次写博客 , 希望有大佬能指出不足 。
文章插图
二、利用selenium模拟登陆获取cookie并保存到本地PS:很多朋友问我QQ空间现在用这个方法登录有滑动验证码 , 但是论文+复试=繁忙 , 所以提供一个简单的方法:1、手动登录自己的QQ空间 , 然后F12->Network , 随便点一个链接 , 手动复制下右边Headers里边的cookie
文章插图
2、到python里运行下把cookie转字典的代码cookie = '刚刚手动复制的cookie'# 字符串cookie转字典格式cookie_dict = {}for i in cookie.split('; '):cookie_dict[i.split('=')[0]] = i.split('=')[1]print(cookie_dict)
效果如下:
文章插图
3、获取g_tk
文章插图
文章插图
用selenium打开 ,
可以选择直接点击已登陆的QQ头像登陆或者选择账号密码登陆 , 这里我采用账号密码登陆获取cookie , 需要注意的是登陆界面是在一个iframe里面 , 需要先切换到这个iframe里面然后才能点击输入账号密码以及登陆等操作 。
文章插图
这里我选择把它保存到本地的txt文件中 , 方便从文件中直接读取 。 具体获取cookie的代码如下:
from selenium import webdriverimport timeimport json qq_number = '********'password = '********' login_url = ''driver = webdriver.Chrome()driver.get(login_url)#进入登陆的ifamedriver.switch_to_frame('login_frame')driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()time.sleep(1)driver.find_element_by_xpath('//*[@id="u"]').send_keys(qq_number)driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)time.sleep(1)driver.find_element_by_xpath('//*[@id="login_button"]').click()time.sleep(1)cookie_list = driver.get_cookies()cookie_dict = {}for cookie in cookie_list:if 'name' in cookie and 'value' in cookie:cookie_dict[cookie['name']] = cookie['value'] with open('cookie_dict.txt', 'w') as f:json.dump(cookie_dict, f)
三、破解空间加密参数g_tk我选择使用QQ空间中好友栏获取所有的好友列表 , 很容易就可以在network里边发现有个好友列表的json格式的链接
文章插图
这么舒服的嘛
文章插图
不多哔哔 , 先发送个请求再说
文章插图
headers有了啊 , cookies也有了啊 , 403?!
文章插图
这可咋整 , 俗话说遇事不决问百度 , 度娘的回答是参数中的g_tk是空间加密的一个参数 , 要想正确访问就要把这个加密的值算出来 , 加密算法在一个js中 。
文章插图
打开这个文件看看 , 哇 , 怎么是一片奇奇怪怪的代码 , 点一下Sources 面板下方的 pretty print 按钮{}就可以把JavaScript的代码格式化了 。 然后Ctrl+F找一下这个g_tk , 发现他的值是QZFL.pluginsDefine.getACSRFToken()函数返回的结果 , 再次Ctrl+F找到了这个函数的位置 。
文章插图
文章插图
QZFL.pluginsDefine.getACSRFToken()函数获取cookie中的p_sky的值 , QZFL.pluginsDefine.getACSRFToken._DJB()函数将这个值通过与5381位运算算来算去得到一个值 , 这个值就是我们要的g_tk , 将这段代码改成我们要用的python代码:
def get_g_tk():p_skey = cookie_dict['p_skey']h = 5381for i in p_skey:h += (h
- 缩小|调整电脑屏幕文本文字显示大小,系统设置放大缩小DPI图文教程
- 告诉|阿里大佬告诉你如何一分钟利用Python在家告别会员看电影
- Python源码阅读-基础1
- Python调用时使用*和**
- 如何基于Python实现自动化控制鼠标和键盘操作
- 解决多版本的python冲突问题
- 学习python第二弹
- 更改计算机待机睡眠状态时间方法,电脑设置关闭显示器时间教程
- 随身携带「Windows」Windows To Go制作教程
- Python中文速查表-Pandas 基础