先说两句废话,今天和小伙伴在看空间的小秘密,惊讶的发现有个共同的小秘密,就想把他找出来hhh,然后就有了这一步

1. 获取数据

先打开网页版的QQ邮箱,并且进入写信界面,然后!!!把右侧好友列表全部展开一遍(否则不会获取好友数据)

然后就可以开始获取数据了

①先按下强大的F12,接着选取页面的元素(快捷键Ctrl+Shift+C)

②选中右侧好友列表上方的查找联系人,会跳转到对应的div标签,但我们要的数据在他的上上上级标签里边,就是这个标签↓↓↓

<div id="AddrTab" class="addrtab cpright" style="">

③复制这个标签的内容,里边就包含了我们所有的好友数据,随便存到一个txt文件里边就好,接下来用。

这里也给出好友数据所在标签的Xpath路径,会用的小伙伴可以直接用

/html/body/form[2]/div[2]/div[1]/div[4]

2. 数据清洗

这里的清洗很简单,就是把QQ号和备注提取出来存到excel里边,等朋友的excel也准备好了,两个文档查重就找到了共同好友。话不多说直接上代码

import re
import xlwtfile_name = "QQ好友.txt"f = open(file_name, encoding="UTF-8")
text = f.read()# 将数据分行,不然看着难受
split_text = text.split("</div>")# 新建excel文档用于保存
data = xlwt.Workbook(encoding='UTF-8')
sheet = data.add_sheet("qq好友")# 匹配每一个人
pattern = r'title=".*?@qq.com" class="lm_addr" tabindex="0">.*?</a>'
compile_re = re.compile(pattern)# 匹配QQ号用
qq_pattern = r'title=".*?@qq.com"'
qq_re = re.compile(qq_pattern)# 匹配姓名用
name_pattern = r'"lm_addr" tabindex="0">.*?</a>'
name_re = re.compile(name_pattern)# 记录写到第几行了
row = 0# 匹配所有符合正则表达式的内容
for i in split_text:name_list = compile_re.findall(i)if len(name_list) == 1:     # 仅匹配到一个姓名qq = str(qq_re.findall(name_list[0])[0][7:-8])name = str(name_re.findall(name_list[0])[0][23:-4])# 将 < > " & 空格几个转义字符转为原字符,应该还有其他需要转义的字符,这里没考虑name = name.replace("&nbsp;", " ").replace("&lt;", "<").replace("&gt;", ">").replace("&amp;", "&")sheet.write(row, 0, qq)sheet.write(row, 1, name)row = row + 1
# 保存excel文档,选择的包xlwt仅支持xls格式文件,不支持导出到xlsx
data.save(file_name + ".xls")

然后保存的excel是下边这种样式的:

QQ 备注
123456789 卖女孩的小火柴
12345678 容嬷嬷当年也是一枝花
1234567 加肥猫
123456 我叫抄级学霸
12345 老阿姨

到这里自己的好友列表就提取完毕了(可以做个备份hhh)。现在就只差朋友的列表了

3. 查找共同好友

这时候好友的excel也已经发给你了,虽然查重用excel就可以完成,但我还是选择用python装个X

还是直接上代码

import xlrdfilename_1 = "我的好友.xls"     # 我的好友excel
filename_2 = "朋友的好友xls"     # 朋友的好友exceldata_1 = xlrd.open_workbook(filename_1)     # 我的
data_2 = xlrd.open_workbook(filename_2)     # 朋友的
table_1 = data_1.sheet_by_index(0)          # 我的
table_2 = data_2.sheet_by_index(0)          # 朋友的# 我的好友:获取有多少行,然后逐行转换成json数据
rows_1 = table_1.nrows
list_1 = {}
for i in range(0, rows_1):qq_id = table_1.row(i)[0].valueqq_name = table_1.row(i)[1].valuelist_1[qq_id] = qq_name# 朋友的好友:获取有多少行,然后逐行转换成json数据
rows_2 = table_2.nrows
list_2 = {}
for i in range(0, rows_2):qq_id = table_2.row(i)[0].valueqq_name = table_2.row(i)[1].valuelist_2[qq_id] = qq_name# 开始查重
keys_2 = list_2.keys()
for key in list_1.keys():if key in keys_2:print(key)print(list_1[key])print(list_2[key])

这里是直接输出,没有再去保存

然后,就是接着开篇的废话了,我和朋友的共同好友结果很出乎意料,,,,总共输出了两个QQ号:一个是我的,另一个是朋友的。查了一下说QQ会把自己也算在好友列表中,就像是自己加了自己,所以才会出现“你们有1个共同好友”。但是这个空间的小秘密是谁发的就很奇怪了(确定不是我俩发的),就随缘吧

这就是我的办法了,喜欢的朋友不妨仔细看一看,如果有改进的地方,热烈欢迎!
我的,另一个是朋友的。查了一下说QQ会把自己也算在好友列表中,就像是自己加了自己,所以才会出现“你们有1个共同好友”。但是这个空间的小秘密是谁发的就很奇怪了(确定不是我俩发的),就随缘吧

这就是我的办法了,喜欢的朋友不妨仔细看一看,如果有改进的地方,热烈欢迎!

超简单的方法找出QQ共同好友相关推荐

  1. 找出QQ共同好友的实现

    以下是qq的好友列表数据,冒号前是一个用,冒号后是该用户的所有好友(好友关系是单向的,也就是说A是B好友,B不一定是A好友) A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A ...

  2. hadoop找出QQ共同好友算法实现

    背景 A:B,C,D,E,F 表示A有bcdef好友 B:C,D,H,Y 以上可知道AB的共同好友为CD 思路: 1:我们先找出一个人被哪几个人共同拥有 测试数据: 2:第一阶段mr程序: packa ...

  3. MapReduce例子——找出QQ共同好友

    ///\\\\\\\\ fri.txt 如下: person: friend1, friend2, friend3, friend4, -.. A:B,C,D,F,E,O B:A,C,E,K C:F, ...

  4. Java黑皮书课后题第7章:7.14(计算gcd)编写方法,返回个数不确定的整数的最大公约数。编写一个测试程序,提示用户输入5个数字,调用该方法找出这些数的最大公约数,并显示这个最大公约数

    7.14(计算gcd)编写方法,返回个数不确定的整数的最大公约数.编写一个测试程序,提示用户输入5个数字,调用该方法找出这些数的最大公约数,并显示这个最大公约数 题目 题目描述 破题 代码 运行实例 ...

  5. 如何将扫描PDF文件转换成word,两个超简单的方法一看就会

    在工作中我们都会经常接触到PDF文件,但是这些都是比较常见的,有时候会因为工作的需要要接触扫描格式的文件,比较难的是需要将扫描PDF文件转换成Word,很多人就很头疼,不知道该从哪里开始下手去做,虽然 ...

  6. “很抱歉,出现错误,word不能启动”超简单解决方法

    "很抱歉,出现错误,word不能启动"超简单解决方法 问题描述 环境 解决方法 问题描述 环境 win7 旗舰版(64位) word版本(2016) 解决方法 1.右键打开文件属性 ...

  7. 快速找出QQ群成员中不在名单内的人

    快速找出QQ群成员中不在名单内的人 Created: Aug 15, 2020 10:21 PM Tags: Python, 计划中 Updated: Aug 17, 2020 10:45 PM 需求 ...

  8. 准确找出QQ群里长期潜水的成员踢出去(转)

    准确找出QQ群里长期潜水的成员踢出去(转) QQ群解除了以前不能多人同时聊天的限制,多个好友可以在群中即时交流.笔者也建立了一个IT作者编辑群,随着加入人数的增多,慢慢达到了群人数的上限,不能够再加入 ...

  9. mapreduce应用-找出扣扣共同好友

    需求:找出扣扣共同好友 用户:好友,好友2,- A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A, ...

  10. 今年生男孩取什么名好的超简单起名方法

    想要给孩子起个好名字,还真的是不容易.想想起个名字,要差一堆的字典,看一堆的名字释义.这还真的不是一件简单的事情啊.而且起名字的时候,可能还要担心犯了一些忌讳就很心酸了. 那先看看宝宝要怎么起名好了- ...

最新文章

  1. R语言ggplot2可视化:使用scale_shape_identity函数显示pch点形状、使用geom_text函数为pch形状添加标(plot characters)
  2. poj1256(贪心+并查集)
  3. 《企业自主搞定ERP》试读:第一章-Odoo概述
  4. VTK:Medical之MedicalDemo3
  5. 自动论文生成器 python_python生成器
  6. 2019 年备受争议的 Facebook 能否走出去年的阴影?| 畅言
  7. 我的世界java致命错误_《我的世界》六个“致命错误”,最后一个“不作死就不会死”...
  8. 手把手教你进行R语言的安装及安装过程中相关问题解决方案...
  9. 互联网小团队创业启示录
  10. Direct3D学习笔记
  11. ext2、ext3、ext4文件系统区别
  12. ATLAS.ti 9(质性研究分析软件)官方中文版V9.0.20.0 | 质性分析软件Atlas.ti下载 | atlas软件是什么软件
  13. Cameralink转HDMI接口转换模块
  14. 激光防护屏 激光防护屏
  15. c++ Win x64 注册表操作
  16. git pull --rebase的作用是什么,它与git pull有什么区别?
  17. Daedalus Icarus
  18. centos7 | All matches were filtered out by modular filtering for argument: mysql-community-server
  19. 微信小程序获取用户手机号存数据库,前后端都有《Java后台版 》
  20. 远程计算机的凭据无法工作,Windows远程桌面时提示凭证不工作问题的解决办法...

热门文章

  1. 2020低压电工模拟考试系统及低压电工考试软件
  2. MAC下安装配置Tomcat
  3. 74xx系列芯片类型及功能概览
  4. MT9 二维数组打印(Python)
  5. .Net Remoting 入门
  6. android汉字转拼音
  7. 如何在网页打开CAD,DWG文件,(在线CAD)在线CAD平台,H5前端显示CAD,网页CAD
  8. 服装管理解决方案丨汇信
  9. MATLAB 函数画图
  10. c语言作业制作仓库管理系统,c语言课设仓库管理系统.doc