以前写过输出单个用户的友邻广播 feeds 的脚本,后来豆瓣把原来的“友邻”一分为二成双向的“朋友”和单向的“关注”,那个脚本就过时了。所以我重写了 pydmb.py,并让它能够输出多层友邻关系的豆瓣广播 feeds 的 OPML 文件。根据六度分割理论,平均只需要六层关系就可以联系到任何两个互不相识的人。那么,从任何一个豆瓣用户出发输出六层友邻关系的广播,是不是最终也可以得到几乎所有豆瓣用户的广播呢?我没有试过,因为即使只输出了两层友邻关系的广播,我已经得到 8825个 feeds,如果输出六层的话会吓到人的。
使用方法
1,下载 pydmb.py2,解压缩到当前目录。
3,运行脚本。这里举一个例子,比如你想获得 keso 和阿北的三层朋友(不包括他们关注的人)的广播 feeds,可以输入命令:
$ ./pydmb.py keso ahbei --friend --depth 3
4,需要帮助可以运行命令:
$ ./pydmb.py --help
Usage: python pydmb.py [-fc] [-d DEPTH] user1 user2 ...
Options:
-h, --help show this help message and exit
-f, --friend output douban miniblog rss of your friends
-c, --contact output douban miniblog rss of your contact
-d DEPTH, --depth=DEPTH
the depth of relationship to output
2008-04-18 UPDATE:
NullPointer 留言说想看看六度连接的试验结果,我也很感兴趣,所以昨天先试了试二度和三度的连接。结果从阿北出发的二度空间能连接到10214个人,三度空间能连接到117113个。
>>> from pydmb import *
>>> graph = UserGraph('ahbei')
>>> graph.search(2, 'fc')
>>> len(graph.dict.keys())
10214
... ...
>>> graph.search(3, 'fc')
>>> len(graph.dict.keys())
117113
结果还算理想,可是用的时间比较厉害,二度连接还好只用了十几分钟,但三度连接用了将近八个小时。照这样推算,分析六度连接(理论上说,就是要分析将近140万豆瓣用户的朋友和关注的人)可能会超过800个小时。所以用这个脚本来做就不太现实了,如果要做的话,最好把 urllib2 和 BeautifulSoup 换成更快的库,然后用两个线程分别来抓取和分析网页,这样效率会高一些。

2 条评论:
我支持你试试6度关联,就当实践一下“小世界”假设了:)用阿北做起点,看看6度连接之后能够关联多少豆瓣用户~ 很想知道实验结果。
我会试试的。我觉得可能不需要六度就可以大致覆盖整个豆瓣
发表评论
指向此文章的链接:
创建链接
<< 主页