2015-10-01 11 views
5

I erhalten verwendet, um den folgenden Code ein:Wie Google-Suchergebnisse

library(XML) 
library(RCurl) 
getGoogleURL <- function(search.term, domain = '.co.uk', quotes=TRUE) 
    { 
    search.term <- gsub(' ', '%20', search.term) 
    if(quotes) search.term <- paste('%22', search.term, '%22', sep='') 
     getGoogleURL <- paste('http://www.google', domain, '/search?q=', 
     search.term, sep='') 
    } 

    getGoogleLinks <- function(google.url) 
    { 
     doc <- getURL(google.url, httpheader = c("User-Agent" = "R(2.10.0)")) 
     html <- htmlTreeParse(doc, useInternalNodes = TRUE, error=function(...){}) 
     nodes <- getNodeSet(html, "//a[@href][@class='l']") 
     return(sapply(nodes, function(x) x <- xmlAttrs(x)[[1]])) 
    } 

search.term <- "cran" 
quotes <- "FALSE" 
search.url <- getGoogleURL(search.term=search.term, quotes=quotes) 

links <- getGoogleLinks(search.url) 

Ich möchte alle Links finden, die von meiner Suche ergab und ich bekomme folgendes Ergebnis:

> links 
list() 

Wie Kann ich die Links bekommen? Zusätzlich möchte ich die Schlagzeilen und die Zusammenfassung von Google Ergebnissen bekommen, wie kann ich es bekommen? Und schließlich gibt es eine Möglichkeit, die Links in ChillingEffects.org Ergebnisse zu erhalten?

+1

http://stackoverflow.com/a/22703153/1457051 – hrbrmstr

Antwort

6

Wenn Sie die html Variable betrachten, können Sie sehen, dass die Suchergebnis-Links alle in <h3 class="r"> Tags verschachtelt sind.

Versuchen Sie, Ihre getGoogleLinks Funktion zu ändern:

getGoogleLinks <- function(google.url) { 
    doc <- getURL(google.url, httpheader = c("User-Agent" = "R 
              (2.10.0)")) 
    html <- htmlTreeParse(doc, useInternalNodes = TRUE, error=function 
          (...){}) 
    nodes <- getNodeSet(html, "//h3[@class='r']//a") 
    return(sapply(nodes, function(x) x <- xmlAttrs(x)[["href"]])) 
} 
3

ich diese Funktion erstellt in einer Liste von Firmennamen zu lesen und dann für die jeweils die Top-Webseite Ergebnis. Es wird Ihnen helfen, dann können Sie es nach Bedarf anpassen.

#libraries. 
library(URLencode) 
library(rvest) 

#load data 
d <-read.csv("P:\\needWebsites.csv") 
c <- as.character(d$Company.Name) 

# Function for getting website. 
getWebsite <- function(name) 
{ 
    url = URLencode(paste0("https://www.google.com/search?q=",name)) 

    page <- read_html(url) 

    results <- page %>% 
     html_nodes("cite") %>% # Get all notes of type cite. You can change this to grab other node types. 
     html_text() 

    result <- results[1] 

    return(as.character(result)) # Return results if you want to see them all. 
} 

# Apply the function to a list of company names. 
websites <- data.frame(Website = sapply(c,getWebsite))]