Rvest:抓取多个 URL

标签 r web-scraping rvest

我正在尝试通过 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 循环,但我无法让它以这种方式工作 :(

最佳答案

这是使用 purrr 和 rvest 的一种方法。关键思想是保存解析的页面,然后提取您感兴趣的位。

library(rvest)
library(purrr)

topmovies <- read_html("http://www.imdb.com/chart/top")
links <- topmovies %>%
  html_nodes(".titleColumn") %>%
  html_nodes("a") %>%
  html_attr("href") %>% 
  xml2::url_absolute("http://imdb.com") %>% 
  .[1:5] # for testing

pages <- links %>% map(read_html)

title <- pages %>% 
  map_chr(. %>% 
    html_nodes("h1") %>% 
    html_text()
  )
rating <- pages %>% 
  map_dbl(. %>% 
    html_nodes("strong span") %>% 
    html_text() %>% 
    as.numeric()
  )

关于Rvest:抓取多个 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36922087/

相关文章:

xml - RCurl 无法下载 URL 内容

r - 如何将 xpath 传递给 html_nodes()?

r - NA 用于网络抓取中的空白

R:显示列中具有重复元素的所有行

php - 如何抓取网站内容(*复杂* iframe,javascript 提交)

r - 使用 R6 类创建并记录一个包

Python 如何抓取图像、文本和音频文件 url 的链接

python - 比较路径和请求的字符串结果

python - 用于 python 和 R 脚本的 Vim(在屏幕上或不在屏幕上)

r - 使用 ggplot 绘制大量时间序列。可以加速吗?