耳熟能详的Facebook(简称FB)是美国社交媒体,总部位于美国加州,成立初期原名为“the face book”,灵感来自美国高中给学生提供的包含照片和联系数据的通讯录(花名册)的昵称,目前尚无官方中文译名,较为广泛的是脸书这个叫法。

玩过Facebook的人应该知道其有一个“限制朋友列表可见”的功能,但通过“共同朋友”,某些条件下可绕过这种限制。本文将提供一种方法、一个工具,将该过程自动化,以找到隐藏朋友数量;使用该工具构建所发现朋友之间关系的网络图,将其友谊呈现出来;用Gephi工具绘制图形,提出一种方法识别图形中的子社群;最后将该过程应用于一个实际的示例场景:检索Mark Zuckerberg的一些隐藏朋友、在图表上进行绘制、识别子社群并以浏览器格式导出最终图形。

1重建隐藏好友列表

Facebook用户可决定是否要个人资料页面展示好友、哪些人可见。其设置页面中还会显示如下警告:

Facebook隐私设置页面

这是由于Facebook还提供了“共同好友”的功能:展示两个帐户好友的共同点,但前提是其中至少有一个人的朋友列表对当前用户可见。尽管Facebook对用户隐私的关注度持续增温,但通过URL https://www.facebook.com/browse/mutual_friends/?uid= ID1&node= ID2还是可以做到,其中ID1 和ID2 是两个Facebook账号的数字ID。

注意:从不同位置或帐户调用相同功能的Facebook返回结果可能会产生不同结果。还好有共同友功能,让重建目标用户的大部分好友列表成为可能:一个能看到目标好友列表、与目标用户至少有一名共同好友的用户(称为枢轴)即可。从目标的共同好友开始,迭代使用用共同朋友功能,用每个步骤中找到的新朋友作为另一次迭代的输入,直至达到该功能的固定点(即没再找到新朋友)为止。

为展示这种方法的潜力,使用一个简单的Python 工具,让其自动执行上述过程。但在此要温馨提示一下:Facebook 服务条款禁止未经许可进行抓取。所以在未经适当授权的情况下,还是别用该工具了吧。

虽然如此,还是要介绍一下这个工具。工具名为ffff,可自行在Github上下载,这是用Python 3编写的工具,使用的是selenium库和Mozilla geckodriver来打开浏览器并递归访问共同朋友页面。这样做的同时,其会跟踪所找到的好友、以构建网络图(见下文)。为不被Facebook检测为抓到现形,其会在每个请求之间以随机秒数暂停一次。当然也可以减少间隔,但要冒着被平台屏蔽的风险。该过程结束时,其会生成一个csv文件,里面包含所找到的好友列表和一个包含相关图表的gexf文件。

2建立好友网络图

在将共同好友功能迭代应用到所有目标用户的好友时,还可跟踪目标朋友之间的关系:如发现目标用户T和枢轴用户P之间有共同好友C,则不仅能知道C是目标用户的朋友,还能知道P和C也是朋友。迭代该过程中,可构建出一个在此过程中找到的Facebook好友关系的网络图:节点是用户,边缘是现有的好友关系。ffff工具能可将权重按所观察到关系的次数比例分配给边缘(选项-w)(但在这个场景中意义不大),一个社群中,用户的公共好友列表越多,被观察到的频率也越高。

有了图表,我们就可以在上面运行各种算法、尝试识别网络内的现有社群,可能有助于识别同事、家人、最亲密好友等。

3实际案例:小扎的好友社群

举个例子,我们将尝试获取马克·扎克伯格的部分Facebook朋友。可用公共朋友列表构建用户关系图:这种情况下无需透视用户; 只需使用其Facebook ID作为目标和支点。

4找到目标的Facebook ID

我们要知道小扎的Facebook ID。找到Facebook帐户的数字ID的几种方法,可以在谷歌上搜索,也可以自动执行:在浏览器中打开小扎的Facebook个人资料页面,检查HTML源代码(Ctrl + U)。在代码中搜索(Ctrl + F)fb:// profile / ; 应该有两个匹配,后面是两个相同的整数值。小扎的ID号为4,正常用户的数字会有很多。

从源代码中查找Facebook ID

5寻找支点用户

需要找到至少一个有公共好友列表的帐户(或你所在帐户可见的朋友列表)及至少要有一个与目标共同的好友。通常一个好的办法是查看与目标进行交互的用户,如通过评论或回应了其内容。另外为找到最多的朋友数,支点用户分散在不同社群会更好(如:工作同事、家庭成员、体育好友等)。总之,越多越好。

ffff项目的存储库中有一个名为“fint.py”的辅助脚本,可以自动查找与给定目标配置文件进行交互的用户,其工作方式与ffff相同。

1python fint.py -fu fbuser@mediaservice.net -fp fbpassword -d geckodriver.exe -t 4 -ls 10 -lp 10 -lc 5 -lr 5

以上命令最多爬取目标用户4 (- t)的100条评论(-lc)、最多1000个回应(-lr),最多10个故事(-ls)和10张照片(-lp)),输出是名为4-pivots.txt的文件,包含了一个Facebook ID列表,可以作为ffff(选项-P)的输入。

使用fint.py找到潜在支点——与小扎互动的用户

由于目标是公众人物,将所有好友都找一遍也没啥太大意义,因而一个支点好友即可:一篇文章列出了一些其已知的好友,在该名单上,Brian Chesky目前有公共好友列表,可作为支点用户。

需要找到其Facebook ID、访问Brian Chesky的好友列表页面,我们会看到URL显示如下:

https://www.facebook.com/brianchesky/friends?

lst= 100028395012070% 3A 558259929%3A1557309584&source_ref = pb_friends_t

URL包含了一个参数“lst”,其包含由字符%3A分隔的三段不同的整数值(其是字符“:”的URL编码)。第二段整数是用户ID,本例中为558259929,可以访问https://www.facebook.com/558259929仔细检查ID,并注意它重定向到https://www.facebook.COM / brianchesky

在URL中查找Facebook ID

6用ffff.py找到隐藏好友

以下部分中显示示例工具在Windows上的虚拟环境中运行。下载geckodriver.exe,并将其放在与python脚本相同的目录中。需要一个有效的Facebook帐户进行抓取。最好是创建一个帐户。在示例中,我们将该帐户的电子邮件地址为“fbuser@mediaservice.net”,密码为“fbpassword”。

现在万事俱备,测试账户的全部信息如下:

  • Facebook帐户邮箱(选项-fu):fbuser@mediaservice.net

  • Facebook帐户密码(选项-fp):fbpassword

  • 目标帐户ID(选项-t):4

  • 支点帐户ID(选项-p):558259929

如您已使用fint.py检索可能的枢轴列表,则可以使用选项-P将列表作为输入。

选项-q用于隐藏浏览器窗口。

1python ffff.py -fu fbuser@mediaservice.net -fp fbpassword -d geckodriver.exe -t 4 -p 558259929 -q

要查看所有可用选项,运行python ffff.py -h

启动程序

可能该程序会在一段时间后遇到问题,如超时,可用Ctrl+ C中断程序、保存所有结果、恢复的会话文件:

1python ffff.py -fu fbuser@mediaservice.net -fp fbpassword --resume session-4-2019050812320

超时后恢复会话

程序终止后,所有好友都会在屏幕上打印,创建了三个不同的文件(用户ID和日期时间将更改):

  • 4-friends.csv

  • 4-friends.gexf

  • session-4-20190508130137

CSV文件里是所找到的好友列表,有ID、姓名、资料URL等。.gexf文件里有准备在Gephi中打开的图形再现(稍后将详细介绍)。最后如找到任何新的数据透视表用户,会话文件可用于稍后恢复程序运行。

程序终止

7绘制社群图

使用Gephi软件绘制小扎的好友图,可能某种方式也可反映其网络中存在的子社群结构。

首先用Gephi打开.gexf文件。起初看上去一片凌乱:

初始图

使用一些布局算法有助于更深入地了解社群图。可以从“概览”选项卡的左下窗口中选择布局。每个布局都有不同参数。运行OpenOrd,再运行ForceAtlas 2.对于后者,我将“Scaling”值设置为10,结果不是很好看。

运行ForceAtlas2后的图形

现在尝试使用“Modularity”类将节点划分到不同的社群,可通过屏幕右侧的“statistics”区进行计算。这里可以为“resolution”参数提供一个值:值越小、分区越多(即更多社群)。

模块化分区节点,分辨率为0.6

现在可以为每个模块类别分配不同的颜色。在左上角的“外观”选项卡中,选择“节点”>“分区”,并选择“模块类别”作为属性。单击“Palette ...”可配置要使用的颜色;单击“应用”所有节点将根据其模块类别进行着色。如对找到的社群不够满意,可返回模块计算并选择不同的参数;对图表感到满意,就转到顶部菜单中的“预览”选项卡,然后配置最终的图形显示方式、以希望的格式导出。

小扎的部分好友关系

如果想要交互式图表,可以探索其他插件(如Sigma Exporter)、以不同的格式导出图形。

8结论

说了这么多,希望你先有个Facebook账号。

selenium 隐藏窗口_查找Facebook用户的隐藏好友和社群相关推荐

  1. qt 隐藏控制台_在控制台程序中隐藏控制台窗口

    大家都知道,当编写一个win32 console application时,当运行此类程序的时候 默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序 中运行一段功能代码, ...

  2. java 微信隐藏右上角_不懂这11个隐藏技巧,别说你会用微信

    微信对于现在的人来说,可以说是必备软件之一,今天蝈蝈就给大家盘点一下微信的各种隐藏技巧,保证有一个你不知道! (1)微信收藏当备忘录用 打开微信--"我"--"收藏&qu ...

  3. 安卓隐藏摄像_侧置摄像与隐藏前摄,拒绝单调乏味,这两款国产5G手机独具匠心...

    近年来国内手机虽然是蓬勃发展,推出了众多的热门机型,不过还是存在着同质化的问题,比如说后置摄像模组的"奥利奥"式设计,就有华为.Redmi.OPPO三家厂商起码十多款机型在用,导致 ...

  4. 19款探岳刷隐藏教程_三星S10系列如何隐藏导航栏 官微“手把手”教你设置

    三星于2月28日在乌镇正式发布国行版三星S10系列手机,无论是出色的外观设计,还是超强的性能,亦或是优秀的三摄成像,无不受到消费者的喜爱.但是,有消费者在使用三星S10系列搭载的One UI时却遇到了 ...

  5. html隐藏窗口栏,electron程序,如何隐藏窗体顶部菜单?

    本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 在mac系统中,electron的菜单是和主窗口是分离的.所以对于主窗口来说,并没有太多视觉上的影响.而在wi ...

  6. 谷歌怎么隐藏地址栏_谷歌新版Chrome将隐藏详细URL地址,域名地位更加凸显

    据外媒报道,谷歌近日对Chrome新版本有所调整:Chrome的Dev和Canary通道(V85)中出现了一些新的特性标志,它们修改了地址栏中网址的外观和行为.主标记称为"多功能框UI隐藏稳 ...

  7. python如何隐藏密码_在python脚本中隐藏密码(仅限不安全的混淆)

    Base64编码是在标准库中,并将停止肩膀冲浪者: >>> import base64 >>> print base64.b64encode("passw ...

  8. 隐藏频道_《TED频道》-隐藏真实自我

    <TED频道>-隐藏真实自我 一.词汇解析 1. emerge[iˈmɜ:rdʒ] vi.出现,浮现; 暴露; 摆脱; 例句: When you read this article, ha ...

  9. 查找窗口隐藏了怎么办_百度地图这些不为人知的隐藏功能

    百度地图这些不为人知的"隐藏功能",我们都知道任何一款软件都有一些我们不仔细去找就发现不了的功能,通常来说这些功能还是非常实用的,这里就来跟大家说一下百度地图里这几个总是被错过的& ...

最新文章

  1. 对话计算机史学权威,才知道量子计算机马上要来了
  2. 第一次胜过MobileNet的二值神经网络,-1与+1的三年艰苦跋涉
  3. php5.5 php5.6,php 5.5 5.6的区别有哪些
  4. ASP.NET Core中的响应压缩
  5. 自驾游你会经常自己做饭吗?
  6. 观看直播 | IoT in Action 微软深圳物联网大会开幕在即,精彩不打烊
  7. 投影幕布尺寸计算器_投影距离计算器
  8. Android机顶盒adb调试及一直显示offline的处理
  9. win10的任务管理器显示所占内存,比实际占用内存小的原因
  10. 蚂蚁呀嘿 App,七天就下架了!
  11. 读取iCloud vCard.vcf文件联系人
  12. arn-linux-gcc编译失败,arm-linux-gnueabihf-gcc交叉编译可执行程序失败的一种处理办法...
  13. Django 使用模板页面,块标签,模型
  14. The package javax.swing is not accessible(java GUI 编程时引用swing包和awt包时会报错怎么办)
  15. jdk-17下载与安装(window10)
  16. NC65 查询信用余额——客户信用联查、销售订单信用联查等
  17. JDK中文API帮助文档【沈东良】
  18. nbextensions安装完不显示,404 GET /static/components/marked/lib/marked.js?v=20230331152041
  19. arm oe linux gnueabi 系统,OpenCV ARM移植(交叉编译opencv) arm-oe-linux-gnueabi-gcc编译opencv3.1.0...
  20. 如何设计一个高并发系统架构

热门文章

  1. 用python 实现朋友圈自动点赞
  2. adc0804模数转换实验报告_proteus仿真:adc0804实现模数转换
  3. 洛谷P1506-拯救oibh总部(DFS)
  4. 齐岳离子液体[C1MIm]SbF6/cas:885624-41-9/1,3-二甲基咪唑六氟锑酸盐/分子式:C5H9F6N2Sb
  5. vs2017单步调试光标乱蹦
  6. webcam html5+PHP 实现网站调用摄像头拍照,存储照片和照片预览功能
  7. Java学习之I/O流
  8. css表格文字超数量就竖排_css实现文字竖排的方式
  9. 9-23 服务器部署(Linux,Windows)
  10. springboot运行时内存溢出_栈溢出的检测