2015-02-26 11 views
5

Próbuję użyć rvest, aby wyodrębnić datę urodzenia dla golfistów PGA. Spróbujemy Stuart Appleby. Oto jego profil na stronie ESPN http://espn.go.com/golf/player/_/id/11/stuart-appleby. Zauważ jego DOB ​​obok jego headshot.Błąd Rvest: wpisz "externalptr"

library("rvest") 
url <- "http://espn.go.com/golf/player/_/id/11/stuart-appleby" 
li_node <- url %>% html %>% html_nodes("li") 

Jego DOB ​​zawarte jest w pozycji 22 na li_node. Idealnie, nie chciałbym twardego kodu [[22]] do mojego programu, ale nawet gdy to robię, napotykam na błędy.

li_node[[22]] 

wyświetla informacji chcę, ale rzeczy takie jak:

word(li_node[[22]], ...) 
substr(li_node[[22]], ...) 
pluck(li_node, 22) 

wszystkich zwróci błąd:

> word(li_node[[22]], 1) 
Error in rep(string, length = n) : 
    attempt to replicate an object of type 'externalptr' 
> substr(li_node[[22]], 1, 2) 
Error in as.vector(x, "character") : 
    cannot coerce type 'externalptr' to vector of type 'character' 
> pluck(li_node, 22) 
Error in FUN(X[[1L]], ...) : 
    object of type 'externalptr' is not subsettable 

Czy istnieje prosty sposób dla mnie, aby pobrać ten DOB korzystając rvest?

Odpowiedz

6
library("rvest") 
library("stringr") 
url <- "http://espn.go.com/golf/player/_/id/11/stuart-appleby" 
url %>% 
    html %>% 
    html_nodes(xpath='//li[contains(.,"Age")]') %>% 
    html_text() %>% 
    str_extract("[A-Z][a-z]{2,} [0-9]{1,2}, [0-9]{4}") 

powraca:

[1] "May 1, 1971" 
+1

Bardzo dobre. Teraz, aby wyodrębnić część "1 maja 1971", mogę zrobić: 'dob <- url %>% html%>% html_nodes (xpath = '// li [zawiera (.," Wiek ")]')%>% html_text () substr (dob, 11, nchar (dob) - 10) ' – hossibley

+0

edytować odpowiedź, aby dodać część str_extract, aby uzyskać ciąg daty ... – cory

+0

Jeszcze lepiej! Dzięki! – hossibley

Powiązane problemy