gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:13:22 29 4
gpt4 key购买 nike

我想就如何创建和可视化博客之间的链接图以反射(reflect)它们之间的“社交网络”提供任何建议。

以下是我的想法:

  • 从一个(或多个)博客主页开始并收集该页面上的所有链接
  • 删除所有属于内部链接的链接(即如果我从 www.website.com 开始。然后我想从形状“www.website.com/***”中删除所有链接)。但存储所有外部链接。
  • 转到这些链接中的每一个(假设您还没有访问过它们),然后重复步骤 1。
  • 继续直到(假设)X 从第一页跳出。
  • 绘制收集的数据。

  • 我想为了在 R 中做到这一点,人们会使用 RCurl/XML(感谢 Shane 的回答 here),结合类似 igraph 的东西.

    但是由于我对其中任何一个都没有经验,如果我错过了任何重要步骤,或者附加任何有用的代码片段以允许执行此任务,这里是否有人愿意纠正我?

    ps:我提出这个问题的动机是,我将在一周内就“博客和 R”发表关于 useR 2010 的演讲,我认为这可能是一种很好的方式,既可以给观众带来乐趣,也可以激励他们去做像这样的事情自己。

    非常感谢!

    塔尔

    最佳答案

    注意:此示例是获取链接的一种非常基本的方式,因此需要进行调整以使其更加健壮。 :)

    我不知道这段代码有多大用处,但希望它可以让您了解前进的方向(只需将其复制并粘贴到 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,我觉得就有意义了。

    无论哪种方式,祝你好运!
    托尼·布雷亚尔

    关于r - 使用R映射博客之间的链接网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3224394/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com