QQ空间网页版:https://user.qzone.qq.com/

登陆后,进入设置,有一个权限设置,设置“谁能看我的空间”为好友可见,然后构造爬虫。

(1)获取Cookie

两种方式:

第一种:通过chrome F12慢慢找获取

第二种:selenium模拟登陆获取

 from selenium import webdriver
from time import sleep
import json QQ_num = ''
QQ_s = ''
driver = webdriver.Firefox()
driver.get('https://user.qzone.qq.com/' + QQ_num + '/main')
driver.switch_to.frame('login_frame')
#找到账号密码登陆的地方
driver.find_element_by_id('switcher_plogin').click()
driver.find_element_by_id('u').send_keys(QQ_num)
driver.find_element_by_id('p').send_keys(QQ_s)
driver.find_element_by_id('login_button').click()
#保存本地的cookie
sleep(1)
cookies = driver.get_cookies()
cookie_dic = {}
for cookie in cookies:
if 'name' in cookie and 'value' in cookie:
cookie_dic[cookie['name']] = cookie['value']
with open('cookie_dict.txt', 'w') as f:
json.dump(cookie_dic, f)

(2)构造链接

这个从知乎上看别人的思路,主要是g_tk的构造

(3)获取所有好友信息(主要是昵称和QQ号)

 import urllib
import requests
import csv
import json
import re class Qzone: #算出来gtk
def get_gtk(self):
p_skey = cookie['p_skey']
h = 5381
for i in p_skey:
h += (h << 5) + ord(i)
g_tk = h & 2147483647
return g_tk #得到uin
def get_uin(self):
uin = cookie['ptui_loginuin']
return uin # 得到好友qq
def get_qq(self):
qq_list = []
friend_list = self.get_friend() csvfile = open('friends.csv', 'w', newline='')
csv_write = csv.writer(csvfile, dialect='excel') for friend in friend_list:
csv_write.writerow(friend)
qq_list.append(friend[1])
csvfile.close()
return qq_list # 找出好友列表
def get_friend(self):
url_friend = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?'
g_tk = self.get_gtk()
uin = self.get_uin()
data = {
'uin': uin,
'do': 1,
'g_tk': g_tk
}
data_encode = urllib.parse.urlencode(data)
url_friend += data_encode
res = requests.get(url_friend, headers=header, cookies=cookie)
friend_json = re.findall('\((.*)\)', res.text, re.S)[0]
friend_dict = json.loads(friend_json)
friend_result_list = []
# 循环将好友的姓名qq号存入字典中
for friend in friend_dict['data']['items_list']:
friend_result_list.append([friend['name'], friend['uin']])
# 得到的好友字典是{name: qqNum}格式的
return friend_result_list if __name__ == '__main__':
qzone = Qzone() #将关系设置为全局变量以供方便调用
relationships = []
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0",
"Accepted-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
with open('cookie_dict.txt','r') as f:
cookie = json.load(f)
#得到qq列表,
qq_list = qzone.get_qq()

QQ空间爬虫--获取好友信息的更多相关文章

  1. QQ空间爬虫最新分享,一天 400 万条数据(附代码地址)

    http://mp.weixin.qq.com/s?__biz=MzAxMjUyNDQ5OA==&mid=2653552228&idx=1&sn=e476bf23556406c ...

  2. xmpp获取好友信息和添加删除好友(4)

    原始地址: XMPPFrameWork IOS 开发(五)获取好友信息和添加删除好友 好友列表和好友名片 [_xmppRoster fetchRoster];//获取好友列表 //获取到一个好友节点 ...

  3. Android之QQ授权登录获取用户信息

    有时候我们开发的app须要方便用户简单登录.能够让用户使用自己的qq.微信.微博登录到我们自己开发的app. 今天就在这里总结一下怎样在自己的app中集成QQ授权登录获取用户信息的功能. 首先我们打开 ...

  4. 技术揭秘“QQ空间”自动转发不良信息

    大家经常会看到QQ空间自动转发一些附带链接的不良信息,即便我们的QQ密码并没有被盗取.最近通过对一个QQ空间自动转发链接进行分析,发现该自动转发机制通过利用腾讯网站存在漏洞的页面,精心构造出利用代码获 ...

  5. 广州商学院Python正方教务系统爬虫(获取个人信息成绩课表修改密码)

    使用python的requests库简单爬取,使用xpath解析内容 可以获取个人信息.个人照片.成绩单和课表 github地址:https://github.com/PythonerKK/GZCC- ...

  6. 手把手教你使用Python网络爬虫获取招聘信息

    1.前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. ...

  7. Python 实现获取微信好友信息

    最近用闲余时间看了点python,在网上冲浪时发现有不少获取微信好友信息的博客,对此比较感兴趣,于是自己敲了敲顺便记录下来. 一.使用 wxpy 模块库获取好友男比例信息和城市分布. # -*- co ...

  8. Python使用itchat获取微信好友信息~

    最近发现了一个好玩的包itchat,通过调用微信网页版的接口实现收发消息,获取好友信息等一些功能,各位可以移步itchat项目介绍查看详细信息. 目标: 获取好友列表 统计性别及城市分布 根据好友签名 ...

  9. 社交媒体(朋友圈、微博、QQ空间)开发一网打尽,PC端移动端都有!——源码来袭!

    一.应用场景 曾几何时,社交媒体已经驻扎到了几乎每个人的生活中.看看你身边的朋友,有几个不玩朋友圈的?就算他不玩朋友圈,那也得玩微博吧.再没有底线,也得玩QQ空间. 不过,作为程序员的我们,没事还是少 ...

随机推荐

  1. hihoCoder#1068(RMQ-ST算法)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在美国旅行了相当长的一段时间之后,终于准备要回国啦!而在回国之前,他们准备去超市采购一些当地特产——比如汉堡 ...

  2. 【转】 Pro Android学习笔记(八七):了解Handler(1):组件和线程

    目录(?)[-] 主线程消息队列和线程池 查看线程信息 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingf ...

  3. django的settings.py设置static

    DEBUG = True ################ STATICFILES ################ # A list of locations of additional stati ...

  4. laravel4 composer报错 d11wtq/boris v1.0.10 requires ext-pcntl

    laravel4 composer报错 d11wtq/boris v1.0.10 requires ext-pcntl laravel 4.2 用composer 安装任何包都会报这个错,通过谷歌找到 ...

  5. 清除SUN服务器部件的suspect状态

    对于suspect状态的部件,可以用setchs命令清除其状态.如果ScApp的版本在5.20.15之前,需要进入service模式后才能使用setchs命令.如果ScApp版本 升级到5.20.15 ...

  6. 10-24C#基础--枚举

    一.枚举 1.定义:在程序编写中,枚举同结构体是并列的,位于Class下面:枚举是常量的集合. enum meiju://枚举是常量的集合,一般冒号后面不指定数据类型 2.格式: enum meiju ...

  7. 关于RandomizedSearchCV 和GridSearchCV(区别:参数个数的选择方式)

    # -*- coding: utf-8 -*- """ Created on Tue Aug 09 22:38:37 2016 @author: Administrato ...

  8. 监控和安全运维 1.5 nagios监控客户端-1

    3. Nagios安装 - 客户端(192.168.0.12)在客户端机器上 rpm -ivh http://www.aminglinux.com/bbs/data/attachment/forum/ ...

  9. 部署和调优 3.1 dns安装配置-1

    安装配置DNS服务器 装一个bind,首先搜一下. yum list |grep bind bind.x86_64   我们安装这个 安装 yum install bind.x86_64 -y 看一下 ...

  10. Codeforces 1097F Alex and a TV Show (莫比乌斯反演)

    题意:有n个可重集合,有四种操作: 1:把一个集合设置为单个元素v. 2:两个集合求并集. 3:两个集合中的元素两两求gcd,然后这些gcd形成一个集合. 4:问某个可重复集合的元素v的个数取模2之后 ...