2010-07-11 3 views
5

블로그 간의 링크 맵을 작성하고 시각화하여 이들 간의 "소셜 네트워크"를 반영하는 방법에 대한 조언을드립니다. 하나 (또는 ​​그 이상)의 블로그 홈 페이지R을 사용하여 블로그 간 링크 네트워크 매핑?

  1. 시작을 (
  2. 내부 링크가있는 모든 링크를 제거합니다 해당 페이지의 모든 링크를 수집 : 내가 그 일을 생각하고 방법은 다음과

    입니다 즉, www.website.com에서 시작하면 "www.website.com/***"모양에서 모든 링크를 제거하고 싶습니다. 그러나 모든 외부 링크를 저장하십시오.

  3. 각 링크로 이동 한 다음 (이미 방문한 적이 없다고 가정) 1 단계를 반복하십시오.
  4. X가 첫 페이지에서 건너 뛰기까지 계속하십시오.
  5. 수집 된 데이터를 플롯합니다.

나는 R에서이 작업을 수행하기 위해, 하나는 igraph 같은 결합, (당신의 대답 here에 대한 감사 쉐인) RCurl/XML을 사용하는 것이라고 상상한다.

하지만 둘 중 누구와도 경험이 없기 때문에 중요한 단계를 놓친 경우 나를 기꺼이 수정하거나 유용한 코드 스 니펫을 첨부하여이 작업을 허용 할 수있는 사람이 있습니까?

ps :이 질문에 대한 나의 동기는 일주일 만에 내가 2010 년 "블로깅 및 R"에 관한 이야기를하고 있는데, 이것은 관객에게 재미를 줄뿐만 아니라 재미있는 방법이라고 생각합니다. 그들 스스로 이런 일을하도록 동기를 부여하십시오.

고맙습니다.

답변

7

NB :이 예제는 링크를 얻는 매우 기본적인 방법이므로보다 견고하기 위해 조정해야합니다. :)

이 코드가 얼마나 유용한 지 잘 모르겠지만 잘하면이 코드를 복사하여 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 보면

, 나는 그것이 의미가있을 거라 생각.

어느 쪽이든 행운을 빌어 요! Tony Breyal

4

탈,

데이터 수집이 유형의 네트워크 이론의 K-눈덩이 검색라고, 당신은, 가장 쉬운 방법을 참고로 R.에서 매우 간단합니다 이 작업을 수행하려면 XMl 패키지와 htmlTreeParse 명령을 사용합니다. 이렇게하면 블로그의 HTML을 나무로 파싱하여 원하는 링크 추출을보다 쉽게 ​​수행 할 수 있습니다.

또한 그래프를 완벽하게 표현할 수있을뿐만 아니라 유용한 기능을 제공합니다. graph.compose 두 개의 그래프를 가져 와서 가장자리 집합 구성을 반환합니다. 계속해서 "스노우 볼 굴리기"로 데이터를 결합해야합니다.

  1. 이 씨앗의 모든 이웃을 찾기 일부 종자 블로그
  2. 을 찾아 이웃
  3. 를 연결 중심 씨와의 자아 순 (스타 그래프) 생성 : 프로세스의 기본 단계는 것
  4. 시드의 모든 이웃에 대해 자아 넷을 만들고 원본 시드 그래프를 사용하여 그래프를 반복 작성하십시오.
  5. 수집에 관심이있는 k 단계를 반복하십시오.

나는 R 코드가 없지만, generated code that performs a very similar process in Python using Google's SocialGraph API이 있습니다.

행운을 빈다.

+0

덕분에 많은 감사 드류, 나는 그것에 갈 것입니다 (잘하면 시간에 맞춰 작동하게 할거야). –

관련 문제