r语言 - 使用 rvest 抓取和循环的简单解决方案,将 for 循环的结果存储在变量中



>我需要从 3 个页面收集链接,每个页面有 150 个链接,使用 R 和 rvest 库。我使用 for 循环来抓取页面。我知道这是一个非常基本的问题,已经在其他地方得到了解答: R 网页抓取跨多个页面 使用Rvest刮擦和循环 我尝试了以下代码的不同版本。他们中的大多数都有效,但只返回了 50 个而不是 150 个链接

library(rvest)
baseurl <- "https://www.ebay.co.uk/sch/i.html?_from=R40&_nkw=chain+and+sprocket&_sacat=0&_pgn="
n <- 1:3
nextpages <- paste0(baseurl, n)
for(i in nextpages){
html <- read_html(nextpages)
links <- html %>% html_nodes("a.vip") %>% html_attr("href")
}

代码应返回所有 150,而不仅仅是 50。

您在每次迭代中都会覆盖 links 变量,因此您最终只会得到最后 50 个链接。

但是你使用'i'变量循环,而你的read_html((函数使用nextpages变量,它实际上是3个URL的向量。您应该会收到错误。

试试这个:

links <- c()
for(i in nextpages){
html <- read_html(i)
links <- c(links, html %>% html_nodes("a.vip") %>% html_attr("href"))
}

我们可以使用map而不是for循环。

library(rvest)
library(purrr)
map(nextpages, . %>% read_html %>%
html_nodes("a.vip") %>% 
html_attr("href")) %>% flatten_chr()
#[1] "https://www.ebay.co.uk/itm/Genuine-Honda-Chain-and-sprocket-set-Honda-Cub-C50-C70-C90-Heavy-Duty/254287014069?hash=item3b34afe8b5:g:wjEAAOSwqaBdH69W"         
#[2] "https://www.ebay.co.uk/itm/DID-Heavy-Duty-Drive-Chain-And-JT-Sprocket-Kit-For-Honda-MSX125-Grom-2013-2019/223130604262?hash=item33f39ed2e6:g:QmwAAOSwdrpcAQ4c"
#.....
#...

最新更新