前言

虽然扒qq空间不是很地道,但咱还是干干吧……正好也是闲来无事,我这个应该不会被别人发现 tao)

技术路线

selenium + beautifulsoup + pyautogui + echarts
selenium模拟浏览器
beautifulsoup解析文本
pyautogui 负责下拉
echarts 可视化图像

需要注意的点

QQ空间在加载的时候,是一部分一部分加载的。也就是说当下拉到最底的时候,才可以在网页中刷新出来新的内容,并且一部分说说消除掉。
如下图

下拉后

注:一个ul对应着一组说说

代码

了解了上面的现在就开始写代码
代码结构:

QQ空间解析

  • main.py
  • jiexi.py
  • data_conversion.py
  • visualization.py
  • data
第一步 爬取说说&解析文本
# QQ空间解析/main.py
# encoding=utf-8
from selenium.webdriver import Edge
import time
import jiexi
import pyautogui
driver = Edge()
# yourqq写你的QQ号
driver.get("https://user.qzone.qq.com/yourqq/infocenter")
time.sleep(10) #在这10s内你要人工登录
for i in range(10000):time.sleep(1)html=driver.find_element_by_xpath("//*").get_attribute("outerHTML")# 解析htmljiexi.get(html)pyautogui.scroll(-7500)# 向下滑动# time.sleep(1)
driver.close()
解析文本部分
# QQ空间解析/jiexi.py
#encoding = utf-8
from bs4 import BeautifulSoup as BS
import re# 正则表达式进行匹配
def getText(match,text,group=1):tmp=re.search(match,text,re.S)if (tmp==None):return ""else:return tmp.group(group)def get(html):soup=BS(html,"html.parser")shuoshuos=soup.find_all(name="li",attrs={"class":"f-single f-s-s"})for i in range(len(shuoshuos)):text=shuoshuos[i].get_text()user=getText(r"  (.*?)[  , ].*(\d\d:\d\d)",text)time=getText(r"  (.*?)[  , ].*(\d\d:\d\d)",text,group=2)llcs=getText(r"浏览(\d*?)次",text)haoyou=getText(r"\+1(.*?)[共,等](\d+)人觉得很赞",text).split("、")likes=getText(r"\+1(.*?)[共,等](\d+)人觉得很赞",text,group=2)dic={"user":user,"time":time,"llcs":llcs,"haoyou":haoyou,"likes":likes}# print("data/"+user+time+".txt")#在data文件夹下面保存with open("data/"+user+time.replace(":","")+".txt","w",encoding="utf-8") as f:f.write(str(dic))

然后运行main.py,然后可能需要你登录一下,让她爬一段时间(几个小时)。然后大功告成!
下图是data文件夹下面的一些生成txt文件

txt内部内容
分别对应

  • QQ昵称
  • 发送时间
  • 浏览量
  • 部分点赞好友
  • 点赞数量

QQ说说具体内容我没爬,毕竟还是别啥都爬 /脸红

然后做一个数据可视化。我感觉还算是很绚丽的哦。

第二步 数据可视化1 数据处理
#  QQ空间解析/data_conversion.py
import glob
filelist=glob.glob("data/*.txt")
dic={};
for file in filelist:with open(file,"r",encoding="utf-8") as f:d=eval(f.read())if (dic.get(d["user"])==None):dic[d["user"]]={}for haoyou in d["haoyou"]:if dic[d["user"]].get(haoyou)==None:dic[d["user"]][haoyou]=1else:dic[d["user"]][haoyou]=dic[d["user"]][haoyou]+1
l = []
for key in dic:if key == '':continuefor key2 in dic[key]:if key2 == "":continuel.append([key,key2,dic[key][key2]])#key 收到 key2 dic[key][key2] 次点赞
with open("list.txt","w",encoding="utf-8") as f:f.write(str(l))

生成一个list.txt,里面记录着一个比较大的列表。

第三步 数据可视化2 利用echart构建图

接下来我们用echarts进行数据可视化

#  QQ空间解析/visualization.py
from pyecharts.charts.basic_charts.graph import Graph
links = []
nodes = []
with open("list.txt","r",encoding="utf-8") as f:tmp = eval(f.read())dic = {}for item in tmp:dic[item[0]] = dic.get(item[0],1) + item[2]dic[item[1]] = dic.get(item[1],1)links.append({"source":item[1],"target":item[0],"value":item[2]})for key in dic:nodes.append({"name":key,"symbolSize": (dic.get(key,1)+9)//10,"value":dic[key]})graph = Graph()
graph.add("",nodes,links,categories=None, # 结点分类的类目,结点可以指定分类,也可以不指定。is_focusnode=False, # 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。默认为 Trueis_roam=True,)
graph.render(r"QQ点赞关系图.html")

最终生成一个html文件,调整宽度和高度。

我把它调成9000px和7000px这样显示的清楚一些(大概对应几百个好友)。
利用chrome浏览器打开这个html文件

  1. 调整图片大小位置
  2. F12->ctrl+shift+P->screenshot,点击下面的按钮,过一段事件,可能保存时间有些长,我之前也是试过用另存为图片的方式进行保存图像,但是保存下来的图像是空的,可能是图片太大的原因。(我花了大概30s保存下来,原图大概30多M)
    最终呈现的效果如下:

我来解释一下这张图像。

  1. 点越大说明受到你总点赞量越多(总点赞量:爬取时间段发送的说说数量*平均每条说说在下面显示的点赞人数)。
  2. 越靠近边缘和你的共同好友越少,越靠近中心和你的共同好友越多。
  3. 关系比较密切的好友通常聚集着某一个区,例如,高中初中同学集中在上方,大学同学集中在左方等等。

本人菜鸡一枚,感谢各位大佬能看到最后!
哈哈哈哈

【python爬虫】爬取QQ空间说说相关推荐

  1. 如何用python爬虫爬取qq空间说说

    之前学了下爬虫一直就想爬一下QQ空间 在爬取之前需要做的准备工作 安装python3 需要的库: re 正则 selenium 需要安装 chrome 或者 Firefox 还有他们的模拟 Chrom ...

  2. python爬虫爬取qq空间说说_用python爬取qq空间说说

    环境:PyCharm+Chorme+MongoDB Window10 爬虫爬取数据的过程,也类似于普通用户打开网页的过程.所以当我们想要打开浏览器去获取好友空间的时候必定会要求进行登录,接着再是查看说 ...

  3. python爬取加密qq空间_使用python+selenium爬取qq空间好友动态

    使用python+selenium爬取qq空间好友动态 分析过程如下: 要想用selenium登陆qq空间,必须点击账号密码登陆按钮然后再填写账号密码登陆. 1.PNG 点击账号密码按钮后跳转到如下页 ...

  4. QQ爬虫-爬取QQ空间

    背景: 在一篇个人博客看到了相关的爬虫的知识,个人比较有兴趣,就花了点时间研究了一下,主要通过好友空间的互动(相互访问量,点赞,评论,以及其他互动),以及好友之间聊天的活跃度,日常点赞量,好友之间的关 ...

  5. python爬虫爬取qq音乐热歌榜的歌曲到本地

    文章目录 项目目标 具体实现步骤 完整代码 运行结果 项目目标 爬取qq音乐热歌榜https://y.qq.com/n/yqq/toplist/26.html到本地文件夹 具体实现步骤 程序思路:用s ...

  6. python selenium爬取QQ空间说说

    准备工作 安装selenium, pyquery, json模块. 使用的是火狐浏览器,所以还要安装geckodriver, 下载好后,把geckodirver.exe文件放在python.exe同一 ...

  7. Python单线程爬取QQ空间说说存入MySQL并生成词云(超详细讲解,踩坑经历)

    利用python爬取好友说说并分析 看了网上的许多博客,基本上都是一个样,基本的知识也没详细解释,我这次也想跟大家仔细分析一下,自己还是要有一定爬虫基础,本人技术有限,如果本文哪有错误或不够准确的地方 ...

  8. 爬虫-爬取QQ空间 并生成图片

    #coding:utf-8import time from selenium import webdriver from lxml import etree #这里一定要设置编码格式,防止后面写入文件 ...

  9. python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

    python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用 ...

  10. python爬取好友qq空间_python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库...

    title: python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取 ...

最新文章

  1. 2020校招薪酬大比拼,你被倒挂了没?
  2. mysql特别点_Mysql 特别注意点!
  3. 18个设计精美的旅游及酒店网站案例
  4. 机器学习 模型性能评估_如何评估机器学习模型的性能
  5. mysql 触发器 运算符_mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法...
  6. 类图的使用 c# 1613918428
  7. hdu 1394 线段树计算逆序数
  8. python二进制文件读写文件_Python二进制文件读写
  9. 关于Wincc 7.0 sp1 亚洲版的下载链接地址及授权,破解
  10. Vue - 加载静态图片的方式
  11. 路由器动态ip获取不到的处理办法
  12. 一个TCP长连接设备管理后台工程(四)---jtt808协议解析
  13. java敌人发射子弹
  14. Restful API 生成复杂Json数据结构及使用客户端解析该数据结构(三)
  15. ubuntu 18.04 卸载firebox
  16. 解析JPEG文件的GPS信息
  17. 图形和函数图像的绘制
  18. Spring Boot idel 实现热部署
  19. 静态网页统计浏览次数
  20. 【计蒜客系列】挑战难题4:简单斐波那契

热门文章

  1. 带著一颗心、浪迹天涯
  2. 游戏鼠标的dpi测试软件,google软件dpi 鼠标dpi测试软件
  3. Websocket(一)——原理及基本属性和方法
  4. 索尼PXW-X580摄像机SXS卡损坏提示需要格式化的数据恢复方法
  5. 网站重定向-http怎么重定向到https最全解决方案
  6. 88.计算500以内最大的10个能被13或17整除的自然数之和。
  7. PEI-BD 聚醚酰亚胺-双马来酰亚胺/mPEG-PCL-g-PEI 聚乙二醇-聚己内酯-聚乙烯亚胺
  8. 计算机桌面出现一个色块,电脑显示器出现条纹色块的解决方法
  9. 超分科研以及论文常用网址
  10. 【转】Linux那些事儿之我是U盘(4)想到达明天,现在就要启程