看了网上大神和相关书本的操作,自己实践并改变了一些。我把我的思路和细节写出来。写的不好多多指教。
我用了两种方法爬取数据重点内容,一个是直接爬取,另一个是利用Selenium模拟
第一种:使用Google Chrome浏览器,打开网页版qq登录界面,在登录之前按F12

输入账号密码登录后点击说说,在右侧Google Chrome开发者工具中选择Network,Filter右侧选择XHR,可以筛选掉很多加载的文件,在Name下面查看一个前缀为”emotion_cgi_msglist_v6“的文件,点击后在右侧Headers中找到Request Headers,复制下面所有的内容(标签前面的:去掉),关掉Request Headers,在下面Query String Parameters中复制uin和g_tk。这样我们就把爬取所需要的三个关键东西准备好了,更换这三个东西就可以爬取不同qq号的好友说说。

说明一下在写脚本之前的功课,在Query String Parameters的format中可以看到是jsonp,说明这个网页返回的是json格式的数据,点击Headers的右侧的Preview查看返回的数据

我们需要爬取的数据包括msglist(发表说说的信息),total(只需要爬取一次就可以,total代表发表说说的总数量,和真实数量有区别,因为有些说说已经被删除)。提一句,num为网页返回的说说的数量信息,单次请求超过40后会只返回10条。点开msglist,里面包含数量为num的说说的信息,点开其中的某一个,有若干信息,我们需要爬取的包括cmtnum(评论的数量),commentlist(评论人的信息),content(说说的内容),createTime(创建说说的时间),name(发表人name),uin(*发表人qq,后
面构建url时需要用到),tid(构造获取点赞信息的url*)。这样返回的json数据是一页的,我们需要构建不同页的好友说说的url。观察并去掉一些字符后,最终我们可以得到这样的格式:
https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin= A &pos=B&num=20&g_tk=C
A填我们上面的得到的uin,C填复制的g_tk,B的填法(和num的值有关)是:0代表第一页(即从第一条说说到第二十条说说),20代表第二页,以此类推

返回的信息不包括点赞的信息,点赞的信息有另外的网页返回返回数据。
我们看一下啊,首先在某一条说说中点击”某某多少人觉得很赞”,出现如下图的内容

在右侧出现了一个前缀为”get_like_list_app“的文件,点击Preview查看返回的数据格式,data是返回的点赞信息,点开data,需要爬取的信息包括total_number(点赞数量,和显示的点赞有区别,原因可能是有些点赞被撤回),like_uin_info(点赞人的信息),点开后可以看到addr(地址),constellation(星座),fuin(点赞人的qq),gender(性别),if_qq_friend(是否是好友),if_special_care(不大清楚是什么),if_special_vip(是否是vip),nick(昵称)

构建点赞信息的url,方法与上面类似,最终得到格式如下:
https://user.qzone.qq.com/proxy/domain/users.qzone.qq.com/cgi-bin/likes/get_like_list_app?uin=A&unikey=B&begin_uin=0&query_count=60&if_first_page=1&g_tk=C
A填我们复制的uin(注意不是爬取的),B填构造好的点赞url(构造格式为:http://user.qzone.qq.com/D/mood/E.1,D填爬取的uin,E填爬取的tid),C填复制的g_tk。

在爬取之前还需要一件准备工作,需要得到好友列表,这样我们才知道要爬取那些人的说说。介绍两种方法。在这里先介绍第一种,在第二种爬取方法中介绍第二种。
这时候看Google Chrome 开发者工具Name下面有一个前缀为”friend_hat_get.cgi“的文件,复制Headers中General下Request URL的值,这就是我们爬取好友列表信息需要的url。查看它的Preview,会发现它返回的是好友列表,我们需要爬取的包括data下面的列表名(即qq号)和realname(应该是备注)。

使用的软件是PyCharm,需要的库为requests(请求网页),json(解析返回的json格式的数据),multiprocessing(多进程),pymongo(存储说说的数据库)

#导入依赖的库
import requests
import json
from multiprocessing import Pool
import pymongo
#浏览器的头
headers = {
#填写复制的信息
}
ownQQ = '
#复制的uin
'
g_tk = '
#复制的g_tk
'
url = '
#复制的url
'
#本地数据库
client = pymongo.MongoClient('localhost',27017)
#数据库名 Qzone2
mydb = client['Qzone2']#好友列表
QQs = mydb[ownQQ+'QQs']
#存取说说信息
qzone = mydb[ownQQ+'qzone']#第一步 爬取好友列表
def getFriends(url):html = requests.get(url,headers=headers)#因为返回的数据格式不符合json,需要处理一下#91可能会有所变化 如果格式不对 自己打印查看然后改进一下#测试json格式是否正确的网站:http://www.bejson.com/response = '[' + html.text[10:][:-90] + '}}}]'# print(response)#解析json数据json_Data = json.loads(response)[0]for d in json_Data['data']:qq = dtry:name = json_Data['data'][qq]['realname']info = {'qq':d,'realname':name}except:info = {'qq':d,'realname':''}QQs.insert_one(info)#第二步 爬取信息
def getInfos(qq):#没有权限的跳过try:url = 'https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=' + qq + '&pos=0&num=20&g_tk='+ g_tkhtml = requests.get(url, headers=headers)# 格式处理response = '[' + html.text[10:][:-2] + ']'json_Data = json.loads(response, encoding='utf-8')[0]total = json_Data['total']for pos in range(0, int(total), 20):url = 'https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=' + qq + '&pos=' + str(pos) + '&num=20&g_tk=' + g_tkhtml = requests.get(url, headers=headers)# 格式处理response = '[' + html.text[10:][:-2] + ']'json_Data = json.loads(response, encoding='utf-8')[0]msglist = json_Data['msglist']if msglist != None:for msg in msglist:# 评论数量cmtnum = msg['cmtnum']# 说说内容Scontent = msg['content']# 发表时间timeShuo = msg['createTime']comments = []if cmtnum:# 评论人员列表commentlist = msg['commentlist']for comment in commentlist:# 评论人qqqq_comment = comment['uin']# nickname# name = comment['name']# 评论时间createTime = comment['createTime']createTime2 = comment['createTime2']# 内容# content = comment['content']comments.append('{ "qq_comment":"' + str(qq_comment) + '","createTime":"' + createTime + '","createTime2":"' + createTime2 + '"}')tid = msg['tid']# 构造说说urlSurl = 'http://user.qzone.qq.com/' + qq + '/mood/' + tid + '.1'Like = get_likes(Surl)data = {'qq': qq,'content': Scontent,'createTime': timeShuo,'cmtnum': cmtnum,'comment': comments,'like_number': Like['like_number'],'like_info': Like['like_info']}qzone.insert_one(data)except:print('error')pass#获取点赞信息
def get_likes(url):#根据传入的说说地址 构造获取点赞信息的urlurl = 'https://user.qzone.qq.com/proxy/domain/users.qzone.qq.com/cgi-bin/likes/get_like_list_app?uin='+ownQQ+'&unikey='+\url+'&begin_uin=0&query_count=60&if_first_page=1&g_tk='+g_tkhtml = requests.get(url,headers=headers)#网页编码转换为unicodehtml.encoding='unicode'# 格式处理response = '[' + html.text[10:][:-3] + ']'json_Data = json.loads(response)[0]['data']total_number = json_Data['total_number']likes = []if total_number:like_uin_info = json_Data['like_uin_info']for info in like_uin_info:addr = info['addr']constellation = info['constellation']fuin = info['fuin']gender = info['gender']if_qq_friend = info['if_qq_friend']if_special_care = info['if_special_care']is_special_vip = info['is_special_vip']# nick = info['nick']likes.append('{ "addr":"'+addr+'","constellation":"'+constellation+'","fuin":"'+str(fuin)+'","gender":"'+gender+'","if_qq_friend":"'+str(if_qq_friend)+'","if_special_care":"'+str(if_special_care)+'","is_special_vip":"'+str(is_special_vip)+'"}')likes.append('{ "fuin":"'+str(fuin)+'"}')data = {'like_number':total_number,'like_info':likes}return data
if __name__ == '__main__':
# 每次使用,更新headers中的cookie或者全部更新headers 和 g_tk
#换号时更新headers ownQQ 和g_tkgetFriends(url)QQ = [item['qq'] for item in QQs.find()]pool = Pool(processes=4)pool.map(getInfos,QQ)

下篇再续

爬取qq好友说说并对数据简单分析相关推荐

  1. qq动态名片代码_利用Python动态爬取QQ说说并生成词云,分析朋友状况!

    今天我们要做的事情是使用动态爬虫来爬取QQ空间的说说,并把这些内容存在txt中,然后读取出来生成云图,这样可以清晰的看出朋友的状况. 这是好友的QQ空间10年说说内容,基本有一个大致的印象了. 爬取动 ...

  2. python爬取qq数据_用Python爬取QQ好友空间说说进行分析

    前言: 本文涉及知识点有数据库的读写,python基础,浏览器开发者工具的使用,适用于有编程基础,了解过python的朋友阅读. 环境:PyCharm+Chrome+MongoDB Window10 ...

  3. python爬取qq好友_利用Python爬取QQ好友空间数据

    程序思路 构造请求链接 先获取所有的好友 获取说说 获取留言 获取个人信息 把数据存到数据库 以上就是整个过程中的大思路,然后在逐步把大思路化解成小的具体的问题去解决.本人对于Python学习创建了一 ...

  4. python爬取加密qq空间_python3爬虫爬取QQ好友空间说说

    开发环境Win10 python 3.6.3 pycharm 2018.1 第三方库csv requests pymysql selenium 无头浏览器 PhantomJS 主要思路通过QQ邮箱导出 ...

  5. php爬取qq好友,使用php批量抓取QQ空间相册链接

    前言 小杰之前发布的文章<为什么QQ空间与我们渐行渐远?> 里面就提到小杰会抽空备份QQ空间的照片,但是在网上找了很久也没有找到一个有效的工具 作为一个Phper,淦就完事了,所以顶着寒冷 ...

  6. Python爬取QQ好友空间说说

    刚学了一点爬虫的时候,就想着去爬一下空间说说,后来在打印源码的那一步就卡住了,没有一点点防备,也没有一丝顾虑,我就这样被他拒之门外.毫无疑问这个想法瞬间就被扼杀了,完全不知道打印出来的源码为什么一点空 ...

  7. python爬取qq好友_Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)...

    一.效果如下: 二.运行环境: win10系统:python3:PyCharm 三.QQ机器人用的是qqbot模块 用pip安装命令是: pip install qqbot (前提需要有request ...

  8. 爬取电影《无双》影评数据,分析,可视化

    一,爬取和存储影评数据 import requests import json import time import random import csv from datetime import da ...

  9. Python爬取44130条用户观影数据,分析挖掘用户与电影之间的隐藏信息!

    1.前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学习 ...

最新文章

  1. NHibernate 基本配置 (第一篇)
  2. matlab 函数 向量参数,Scipy integrate(quad,quadration,nquad)不能集成向量参数化函数?等效函数(MATLAB works)...
  3. linux的wc是什么命令,linux中的wc命令
  4. C/Cpp / STL / 模板全特化和偏特化
  5. Express engine 学习笔记 - app.engine 的使用方法
  6. Apache基金会接收阿里RocketMQ为孵化项目
  7. C++ Sets(集合)
  8. 信号量(semaphore)
  9. 深度学习图像分类(五): ResNet
  10. Git之git pull【warning】Pulling without specifying how to reconcile divergent branches is
  11. my资源列表一 (csdn 99% 0分资源下载)
  12. 如何将自己写的项目发布到外网上
  13. 淘客基地淘客小程序系统更新至1.2.4 版本
  14. Linux学习(2)---绝对路径和相对路径
  15. 中国被黑站点统计系统 2006年9月分析报告
  16. Java 实现短信验证功能(个人测试,不需要项目上线,利用容联云)
  17. [轻笔记]Juliav0.6配置jupyter
  18. SEO批量文章繁简转换,同义词替换
  19. 【AI with ML】第 7 章 :用于自然语言处理的递归神经网络
  20. 【dht】dht简介以及使用nodejs查找dht网络学习笔记

热门文章

  1. 展锐Android11安兔兔显示的光圈值修正
  2. 微信公众号发送消息 Java
  3. Lammps 源代码解析
  4. 从文化地理看三国演义
  5. 【印刷行业】RICOH MH5420和MH5440喷头(G5)
  6. 墨者学院-编辑器漏洞分析溯源(第1题)
  7. linux中标麒麟u盘制作,中标麒麟桌面操作系统龙芯版系统安装盘(U盘)制作方法
  8. 使用java方式装配Bean
  9. 华为郑叶来:AI炒作和投机回落,是行业应用春天的开始...
  10. java gui 日历_java 日历程序(gui界面)