代码之家  ›  专栏  ›  技术社区  ›  Tal Galili

用R映射博客之间的链接网络?

  •  5
  • Tal Galili  · 技术社区  · 14 年前

    1. 删除所有内部链接(如果我从www.website.com. 然后我要删除形状中的所有链接“www.website.com/***"). 但是存储所有的外部链接。
    2. 转到这些链接中的每一个(假设您还没有访问过它们),然后重复步骤1。
    3. 继续,直到(假设)X从第一页跳转。
    4. 绘制收集的数据。

    我想为了在R中实现这一点,应该使用RCurl/XML(感谢Shane的回答) here igraph .

    但是,由于我对这两种方法都没有经验,如果我错过了任何重要的步骤,这里是否有人愿意纠正我,或者附加任何有用的代码片段来完成这项任务?

    2 回复  |  直到 6 年前
        1
  •  7
  •   Tony Breyal    14 年前

    注意:这个例子是获取链接的一个非常基本的方法,因此需要进行调整,以便更加健壮。:)

    我不知道这段代码有多有用,但希望它能给您一个方向的想法(只要复制并粘贴到R中,这是一个自包含的示例,一旦您安装了RCurl和XML包):

    library(RCurl)
    library(XML)
    
    get.links.on.page <- function(u) {
      doc <- getURL(u)
      html <- htmlTreeParse(doc, useInternalNodes = TRUE)
      nodes <- getNodeSet(html, "//html//body//a[@href]")
      urls <- sapply(nodes, function(x) x <- xmlAttrs(x)[[1]])
      urls <- sort(urls)
      return(urls)
    }
    
    # a naieve way of doing it. Python has 'urlparse' which is suppose to be rather good at this
    get.root.domain <- function(u) {
      root <- unlist(strsplit(u, "/"))[3]
      return(root)
    }
    
    # a naieve method to filter out duplicated, invalid and self-referecing urls. 
    filter.links <- function(seed, urls) {
      urls <- unique(urls)
      urls <- urls[which(substr(urls, start = 1, stop = 1) == "h")]
      urls <- urls[grep("http", urls, fixed = TRUE)]
      seed.root <- get.root.domain(seed)
      urls <- urls[-grep(seed.root, urls, fixed = TRUE)]
      return(urls)
    }
    
    # pass each url to this function
    main.fn <- function(seed) {
      raw.urls <- get.links.on.page(seed)
      filtered.urls <- filter.links(seed, raw.urls)
      return(filtered.urls)
    }
    
    ### example  ###
    seed <- "http://www.r-bloggers.com/blogs-list/"
    urls <- main.fn(seed)
    
    # crawl first 3 links and get urls for each, put in a list 
    x <- lapply(as.list(urls[1:3]), main.fn)
    names(x) <- urls[1:3]
    x
    

    如果你把它复制粘贴到R中,然后再看x,我认为这是有意义的。

    不管怎样,祝你好运,伙计! 托尼·布雷亚尔

        2
  •  4
  •   OmG    6 年前

    塔尔,

    k-滚雪球搜索 XMl 包装和 htmlTreeParse 命令。这将把一个blog中的HTML解析成一个树,这将允许您更容易地执行感兴趣的链接提取。

    也, igraph 将完全能够代表的图形,但也有一个有用的功能 graph.compose

    1. 找一些种子博客
    2. 找到种子的所有邻居,并创建它的自我网络(星图),种子在中心连接到它的邻居
    3. 对于种子的所有邻居,创建他们的自我网络,并用原始种子图迭代地合成这些图。

    我在R里没有代码,但我有 generated code that performs a very similar process in Python using Google's SocialGraph API .

    推荐文章