2015-06-20 125 views
3

我正在试验rvest学习网络抓取R.我试图复制乐高榜样的页面的其他几节,并使用selector gadget id。网站抓取与R和rvest

我从R Studio tutorial拉下了这个例子。用下面的代码,1和2工作,但3不工作。

library(rvest) 
lego_movie <- html("http://www.imdb.com/title/tt1490017/") 

# 1 - Get rating 
lego_movie %>% 
    html_node("strong span") %>% 
    html_text() %>% 
    as.numeric() 

# 2 - Grab actor names 
lego_movie %>% 
    html_nodes("#titleCast .itemprop span") %>% 
    html_text() 

# 3 - Get Meta Score 
lego_movie %>% 
    html_node(".star-box-details a:nth-child(4)") %>% 
    html_text() %>% 
    as.numeric() 

回答

3

我真的不加快速度上的所有管道和相关的代码,因此可能有一些新的fandangled工具来做到这一点......但鉴于上面的回答让你到"83/100",你可以做这样的事情:

as.numeric(unlist(strsplit("83/100", "/")))[1] 
[1] 83 

我猜会是这个样子与管道:

lego_movie %>% 
    html_node(".star-box-details a:nth-child(4)") %>% 
    html_text(trim=TRUE) %>% 
    strsplit(., "/") %>% 
    unlist(.) %>% 
    as.numeric(.) %>% 
    head(., 1) 

[1] 83 

或者像弗兰克说,你可以计算表达式"83/100"类似于:

lego_movie %>% 
    html_node(".star-box-details a:nth-child(4)") %>% 
    html_text(trim=TRUE) %>% 
    parse(text = .) %>% 
    eval(.) 
[1] 0.83 
2

你可以看到,转换成数字之前,它返回一个" 83/100\n"

lego_movie %>% 
    html_node(".star-box-details a:nth-child(4)") %>% 
    html_text() 
# [1] " 83/100\n" 

您可以使用trim=TRUE省略\n。您无法将其转换为数字,因为您有/。 :

lego_movie %>% 
    html_node(".star-box-details a:nth-child(4)") %>% 
    html_text(trim=TRUE) 
# [1] "83/100" 

如果你将它转换为数字,你会得到NA有警告这并不意外:

# [1] NA 
# Warning message: 
# In function_list[[k]](value) : NAs introduced by coercion 

如果你想在数字83作为最终的答案,你可以使用正则表达式工具如gsub删除100\(假设所有电影的满分为100)。

lego_movie %>% 
    html_node(".star-box-details a:nth-child(4)") %>% 
    html_text(trim=TRUE) %>% 
    gsub("100|\\/","",.)%>% 
    as.numeric() 
# [1] 83