首页 > 解决方案 > 要替换的项目数不是替换长度的倍数。背心刮

问题描述

我知道我的 for 循环有一些问题,但需要有人找出问题所在。

这是两个页面,我想在每个页面中抓取 100 个链接。请注意,您需要凭据才能进入那里。但我在这里写它们只是为了查看所有代码:

urls <- c("http://cli.linksynergy.com/cli/publisher/links/linkfinder.php?mode=basic&keyword=linux&exact=&any=&exclude=&mid=-1&cat=&sort=&retailprice_sort=&productname_sort=&shortdesp_sort=&categoryname_sort=&keyword_sort=&linklang=pt_BR&currec=1&max=100",
"http://cli.linksynergy.com/cli/publisher/links/linkfinder.php?mode=basic&keyword=linux&exact=&any=&exclude=&mid=-1&cat=&sort=&retailprice_sort=&productname_sort=&shortdesp_sort=&categoryname_sort=&keyword_sort=&linklang=pt_BR&currec=101&max=100")

我用rvest包来刮它们。这是 for 循环:

enlaces <- vector("character", length = length(urls))

for(i in seq_along(urls)){
  Sys.sleep(1)
  derby <- read_html(jump_to(session, urls[i]))
  enlaces[i] <- derby %>%
    html_nodes(".td_auto_left a:nth-child(1)") %>% 
    html_attr('href')
}

理想情况下,我会得到一个由 200 个链接组成的向量,为存储在urls.

但是,我得到了错误Number of items to replace is not a multiple of replacement length

我认为问题可能在于enlaces每次迭代中只期望一个对象。但是它创建了 100 并且不知道如何进行。任何想法?

标签: rfor-looprvest

解决方案


我终于通过创建 alist而不是 a 来解决我的问题vector,并在for循环中使用双括号。

enlaces <- list()

for(i in seq_along(urls)){
  Sys.sleep(1)
  derby <- read_html(jump_to(session, urls[i]))
  enlaces[[i]] <- derby %>%
    html_nodes(".td_auto_left a:nth-child(1)") %>% 
    html_attr('href')
}

推荐阅读