2017-06-30 3 views
1

Ich versuche, Kongressmitglieder Noten von der NIAC-Website zu kratzen. Hier ist ein Link von einem Beispiel Vertreter: https://www.niacaction.org/legislator-bio/?bid=C001097Web Scraping in R mit XML und Rvest

Mein Endziel ist es, einen Datenrahmen mit dem Namen des Kongressmitglieds, Zustand, abzulenken, und dann ihre Noten für die 113.-115. Kongress. Ich benutze XML und rvest, um dies zu tun. Hier ist mein Code:

####----- Load Packages -----#### 
library('rvest') 
library('XML') 

####----- Scrape -----#### 
url <- 'https://www.niacaction.org/legislator-bio/?bid=C001097' 

nodes <- read_html(url, xpath = '//h3 | //*[contains(concat(" ", @class, " 
"), concat(" ", "entry-title", " "))]') 


page <- htmlTreeParse(nodes) 

Wenn ich drucken, was ich genannt habe „page“ Ich bin viel mehr Informationen bekommen, als ich will. Ich verstehe nicht warum, weil ich den XPath eindeutig identifiziert habe. Jede Eingabe wäre sehr zu schätzen. Danke

Antwort

1

XML::htmlTreeParse ist das Äquivalent von xml2::read_html (von rvest verwendet), die XPath nicht akzeptiert-dafür verwenden Sie rvest::html_nodes. Verwenden Sie das eine oder andere Paket; sie zu kreuzen wird unordentlich. rvest akzeptiert auch CSS-Selektoren, die können Sie vereinfachen ordentlich:

library(rvest) 
library(tidyverse) # for munging; translate if you like 

url <- 'https://www.niacaction.org/legislator-bio/?bid=C001097' 

page <- url %>% read_html() 

cardenas <- page %>% { 
    data_frame(member = html_node(., 'h1') %>% html_text(), 
       grade = html_nodes(., 'h3') %>% html_text()) 
} %>% 
    separate(grade, c('congress', 'grade'), sep = ' Grade: ') %>% 
    separate(member, c('member', 'info'), sep = ' \\(') %>% 
    separate(info, c('party', 'state', 'district'), extra = 'drop', convert = TRUE) 

cardenas 
#> # A tibble: 4 x 6 
#>    member party state district  congress grade 
#> *    <chr> <chr> <chr> <int>   <chr> <chr> 
#> 1 Rep Tony Cárdenas  D CA  29  Current  A 
#> 2 Rep Tony Cárdenas  D CA  29 115th Congress  A 
#> 3 Rep Tony Cárdenas  D CA  29 114th Congress  C 
#> 4 Rep Tony Cárdenas  D CA  29 113th Congress  D 
+1

Das ist genau das, was ich suchte. Danke, ich weiß das zu schätzen – Jordan