2011-03-03 2 views
6

Google에서 단순히 무언가를 검색 한 다음 결과의 개수를 반환하는 방법이 있습니까? Google의 일부 서비스 (RGoogleDocs, RGoogleData, RGoogleMaps, googleVis)를 중심으로 R 패키지를 많이 보았지만 어디서나이 기능을 찾을 수 없습니다.R : Google에서 문자열을 검색하여 조회수를 반환합니다.

+0

예, Google에 API가 있음을 기억하지만 패키지를 본 기억이 없습니다. 다른 RGoogleFoo 패키지를 공부하면 요리 할 수 ​​있습니다. –

답변

9

이것은 내가 사용하는 것이지만, 결국 단계적으로 제거되는 API 프로토콜을 기반으로합니다. 또한 속도가 제한되어 있으므로 하루에 100 건의 검색이 가능합니다. 아래 함수에서 서비스는 "web"입니다. http://code.google.com/apis/loader/signup.html (모든 URL이 작동 함)에서 키를 가져와야합니다.

GetGoogleResults <- function(keyword, service, key) {  
    library(RCurl) 
    library(rjson) 
    base_url <- "http://ajax.googleapis.com/ajax/services/search/" 
    keyword <- gsub(" ", "+", keyword) 
    query <- paste(base_url, service, "?v=1.0&q=", keyword, sep="") 
    if(!is.null(key)) 
    query <- paste(query, "&key=", key, sep="") 

    query <- paste(query, "&start=", 0, sep="") 
    results <- fromJSON(getURL(query)) 
    return(results) 
} 

그런 다음 당신에게 결과의 구조를 말할 것이다

google <- GetGoogleResults("searchTerm", "web", yourkey) 

str(google)처럼 뭔가를 할 수 있습니다. 결과의 수가 원하는 경우 google$responseData$cursor$estimatedResultCount을 사용할 수 있습니다.

내가 말했듯이 이것은 언젠가는 스타일을 벗어날 수있는 프로토콜을 기반으로합니다. Dirk의 대답에 대신 사용할 수있는 사용자 정의 검색 엔진을 사용하는 대체 방법이 있지만 속도는 제한적입니다 (이 방법에 대한 함수를 원할 경우 noah_at_noahhl.com에서 ping을 수행 할 수 있음).

마지막으로 RCurl을 사용하여 Google에서 페이지를 가져 오는 것이지만, 구문 분석하기가 상당히 어렵습니다. 사용자 에이전트가 속이는 것을 막기 위해 Google의 시도를 스푸핑해야합니다. (이 코드를 공유 할 수도 있지만 Google에서 HTML을 수정할 때마다 문제가 발생합니다.)

+2

방금 ​​추가 할 것입니다 - 이것은 제가 몇 번 실행 한 문제입니다. 충분한 관심이 있다면, 나는 가지고있는 모든 것들을 꾸며서 그것을 진짜 패키지로 만들 것이다. – Noah

+0

굉장! 나는 두 개의 질의 할당 사이에'else'를 입력해야만했습니다. 그러나 이것이 내가 찾고있는 것, 감사합니다! –

+0

좋은 캐치, 내 나쁜 - 더 많은 결과를 얻기 위해 결과를 페이지 매김하는 더 큰 기능에서이 피스를 가져 왔습니다. "else"를 코딩하는 대신 startpos을 0으로 바꿉니다. – Noah

1

당신은 Google Custom Search API 문서에서 시작하여 다음 :)를 공격하는 법을 배워야

가는 뭔가를 얻을 수있는 장소에 충분한 R 인프라가 있어야 얼마나 JSON을 참조 할 수 있습니다.

+0

감사! 나는 그것을 들여다 볼 것입니다 –

관련 문제