for 循环函数具有来自不同列的两个变量 - 不嵌套

问题描述 投票:0回答:1

从具有 至 列的向量列表中,循环应使用第一列中的 url,然后在第二列中的值的名称下存储缩略图

单一值和名称的解决方案可行;但循环遍历列表却不是

目标是将图像存储为:

名称1.jpg

名称2.jpg

名称3.jpg

名称4.jpg

 list <- data.frame(
    urls=c("url1", "url2", "url3", "url4"),
    names=c("name1","name2","name3","name4")
  )

# This works for a single Url and single name  
  page <- read_html(z)
  thumbnail_url <- page %>% html_node("meta[property='og:image']") %>% html_attr("content")
  thumbnail_id <- ("test.jpg")
  download.file(thumbnail_url,thumbnail_id, mode = 'wb')

  

#尝试使用嵌套循环函数但没有成功

  for (i in list$urls){
    for(j in list$names){
      
      page <- read_html(i)
      thumbnail_url <- page %>% html_node("meta[property='og:image']") %>% html_attr("content")
      thumbnail_id <- (paste(j,".jpg"))
      download.file(thumbnail_url,thumbnail_id, mode = 'wb')
      
    }
  }

#使用 nrow 和 ncol 并没有帮助我获得正确的文件名

for (row in 1:nrow(list$urls)) {
  for (col in 1:ncol(list$names)) {
   
    page <- read_html(row)
    thumbnail_url <- page %>% html_node("meta[property='og:image']") %>% html_attr("content")
    thumbnail_id <- (paste(col,".jpg"))
    download.file(thumbnail_url,thumbnail_id, mode = 'wb')
    
  }
}
r web-scraping dplyr rvest
1个回答
0
投票

您只需使用循环计数器作为列表中

url
names
元素的索引即可:

for (i in 1:nrow(list)) {
    page <- read_html(list$urls[i])
    thumbnail_url <- page %>% html_node("meta[property='og:image']") %>% html_attr("content")
    thumbnail_id <- (paste(list$names[i],".jpg"))
    download.file(thumbnail_url,thumbnail_id, mode = 'wb')
}
© www.soinside.com 2019 - 2024. All rights reserved.