Coder Social home page Coder Social logo

renren-relationship's Introduction

人人网好友关系图

恩,很大的题目,但做的很差。所以欢迎大家来fix

更新

2013-03-03

使用 graphviz 绘图, 但还保留了 networkx,使用它来删除节点和计算degree

现在运行 python local_graph.py 就会生成一张漂亮的关系图(现在还没有在图上标记用户名) 所以请确保计算机一正确安装 graphviz

debian系用户只要简单的运行下面的命令即可

sudo apt-get install graphviz

如何运行

  1. git clone 代码
  2. 安装 requirements.txt中的依赖,建议virtualenv
  3. cp account.example account 然后按照其中格式填写人人网帐号
  4. python local_graph.py

运行程序,一段时间后(不同的网络环境会导致抓取时间差异很大,在我这里一共用了40分钟) 程序正常退出。就会在目录中生成一张 result.png 图片。

renren_graphviz

下面是用 networkx 和 matplotlib生成的图片,新代码默认不再使用

renren

这是我校内好友的情况,可以看到这些好友明显是三个圈子:

  • 高中同学圈子
  • 大学同学圈子
  • 码农圈子

还有一些孤立(不属于这三个大圈子的同学)的好友,没有显示。

初衷

初衷总是美好的,当我随便试了几个陌生人后,发现一样可以查看他们的好友。于是我就想到了 两个玩法:

  1. 做一个网站,人们上来只要填写他的人人ID,就会动态的展现他的好友,好友之间的共同好友...
  2. 在一个网站上输入两个人人ID,然后找出这两个ID之间的好友链。

最有意思的是第二个,因为我相信像人人网这样的强关系网络,以及大量的用户,两个用户之间 肯定会有一条/多条好友链接。

端点 <-> A <-> B <-> C ...... X <-> Y <-> Z <-> 端点

当然这个也很难,没想到如何做,于是就做第一个想法。

美好的初衷是如何变成现在这个屌样的?

  1. 某晚,正在在爬好友测试的时候,发现总是爬不到一些人的好友。 然后才发现了一个悲剧的事实,(不过也是合理的):

    好友不是你想爬,想爬就能爬

    只有开放了对应权限的才能察看其好友。

    这下好了,上面的想法2彻底做不了了。想法1也退化成只能自娱自乐了。 也就是只能爬自己好友的好友了

  2. urllib2 怎么卡住呢?

    使用了gevent,我刚开始的模型是 对多个用户,以及同一个用户的好友, 都利用gevent的并发来爬, 测试了两次后, urllib2 无法 read, 到这里,一下卡住了。

    并发会卡住。顺序爬取很顺利,但太慢。 后来偶然发现,

    对同一个人不能并发的抓取, 但还可以对多个人并发

  3. 图太难看了

    本打算 angular.js + d3.js + gevent-socket.io 来动态的在web上绘图。 但心急,想看看能绘制出什么样的图,于是先用 networkx 和 matplotlib 来绘图

    然后才发现 绘制好友的共同好友 几乎不可能,点全部重叠在一起,看都没法看……

    然后又一次吊丝的退化到只显示自己的好友

    最后还花了几小时来调节 图像的显示 效果。。。

可能遇到的问题

怎么无法登录?

请确保你有一个 account 文件,里面第一行写用户名/email, 第二行写password

如果在确保 account 文件正确的情况下,程序还是无法登录,请用浏览器登录一次,再运行程序

显示一个 collect friends 后怎么就卡住呢?

其实不是卡住了,只是抓取好友比较慢,这时又没有输出,所以看着像卡住了,请耐心等待

最后的图太简单了吧,有什么意思吗?

我也不想这样啊,蛋疼,欢迎你来增强它的功能和效果

程序跑完后会报一个这样错误:

`Exception KeyError: KeyError(17784656,) in ignored...`

这个直接忽略掉,应该是某个库不是线程安全的。但这个对结果没有影响。

renren-relationship's People

Contributors

yueyoum avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

renren-relationship's Issues

人人API?

有没有考虑过用人人开放平台api?好像可以直接获取json或xml格式的好友列表。也许省去漫无天日的抓好友时间(相信并行会比我想象的快多了……)

深度os python2.7.13报错

Traceback (most recent call last):
File "local_graph.py", line 202, in
g.import_data(data)
File "local_graph.py", line 50, in import_data
for n in self.G.nodes():
RuntimeError: dictionary changed size during iteration

修改成list包装后,报错:
Traceback (most recent call last):
File "local_graph.py", line 202, in
g.import_data(data)
File "local_graph.py", line 57, in import_data
self.max_degree_value = max(self.degree.values())
AttributeError: 'DegreeView' object has no attribute 'values'

question

I can get the result.png,but also get "Exception KeyError: KeyError(17784656,) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored"...and I have no idea about it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.