【发布时间】:2016-08-23 15:44:12
【问题描述】:
我正在尝试抓取一些循环通过 URL 列表的 IMDB 数据。不幸的是,我的输出并不是我所希望的,更不用说将它存储在数据框中了。
我得到网址
library(rvest)
topmovies <- read_html("http://www.imdb.com/chart/top")
links <- top250 %>%
html_nodes(".titleColumn") %>%
html_nodes("a") %>%
html_attr("href")
links_full <- paste("http://imdb.com",links,sep="")
links_full_test <- links_full[1:10]
然后我可以用
lapply(links_full_test, . %>% read_html() %>% html_nodes("h1") %>% html_text())
但它是一个嵌套列表,我不知道如何将其放入 R 中的适当 data.frame 中。同样,如果我想获得另一个属性,比如说
%>% read_html() %>% html_nodes("strong span") %>% html_text()
要检索 IMDB 评级,我得到相同的嵌套列表输出,最重要的是我必须执行两次 read_html() ...这需要很多时间。有一个更好的方法吗?我猜是for循环,但我不能让它这样工作:(
【问题讨论】:
-
(我假设
top250真的是topmovies。)您的lapply(...)中的列表有什么问题?它只是一个列表(单字符串向量),像向量一样对其进行索引(可选地使用[[代替[)。那么,什么是“适当的框架”?其次,使用“强跨度”可能有点模糊,使用 xpaths 或其他 CSS 约束可能会更好。
标签: r web-scraping rvest