我希望对一堆博客进行社交网络分析,绘制谁链接到谁(不仅仅是通过他们的博客,还包括他们的帖子)。什么软件可以执行这种爬行/数据收集/映射?
谢谢!
答案 0 :(得分:3)
通过“映射”我不确定你是指将原始数据映射到正统的图形数据结构,还是将该数据结构映射到美学库以便渲染它。如果是前者,那么我猜这是一个直接的问题,即编写一个函数来将原始数据(w / r / t,博客链接到哪个,以及多少)转换为图形数据结构,例如邻接矩阵。映射这样的数据结构以便查看可以这样做:
library(Rgraphviz)
# create an synthetic adjacency matrix for 10 blogs
M = sapply(rep(10, 10), function(x){sample(c(0, 1), 10, T, c(0.7, 0.3))})
colnames(M) = paste(rep("b", 10), 1:10, sep="-")
rownames(M) = colnames(M)
# 0's down the main diagonal (eliminate self-edges)
diag(M) = rep(0, 10)
# call the graphviz constructor, passing in adjacency matrix
M_gr = new("graphAM", adjMat=M, edgemode="directed")
g1 = layoutGraph(M_gr)
# (optional) aesthetic parameters for nodes & edges
graph.par( list(edges = list(col="gray", lty="dashed", lwd=1),
nodes = list( col="midnightblue", shape="ellipse",
textCol="darkred", fill="#B0B7C6", fontsize=11,
lty="dotted", lwd=2)) )
# call the device driver
png(file='somefilename.png', width=600, height=460, res=128)
# call the plot function
renderGraph(g1)
# kill the device
dev.off()
alt text http://img13.imageshack.us/img13/7683/bloggraph.png
如果您不仅要显示连接,而是显示这些连接的强度,例如,数量,或者从一个博客到另一个博客的链接频率,您可以通过单独设置线条粗细来实现,通过参数'lwd',我为所有边设置为2,对于此示例(另一个选项是按线型显示连接强度,例如,点线,虚线,实线,颜色)。当然,这些边权重必须在邻接矩阵中设置,这很简单 - 而不是'0'/'1'来表示'未连接'/连接,你可能想要使用'0' / '整数'。
答案 1 :(得分:2)
你也可以在R中使用RCurl或XML(以获取博客文章)和类似igraph(对于SNA)的组合来执行此操作。您将需要解析HTML以获取所有链接,并且XML包可以非常轻松地处理这种处理。
有关SNA分析的一些指示,请查看this related question,尽管这是一个很大的研究领域。
答案 2 :(得分:1)
Nutch是一个不错的抓取工具,但您必须对索引数据进行自己的分析。
答案 3 :(得分:0)
为了记录,我强烈推荐使用Python中的机械化库 - 它可以轻松构建您自己的个性化爬虫/刮刀。