使用rvest进行刮取和循环的简单解决方案,将for循环的结果存储在变量中

使用rvest进行刮取和循环的简单解决方案,将for循环的结果存储在变量中,r,for-loop,web-scraping,rvest,R,For Loop,Web Scraping,Rvest,我需要收集3页的链接,每个有150个链接,使用R与rvest库。我使用for循环在页面中爬行。我知道这是一个非常基本的问题,其他地方已经回答过: 我尝试了以下代码的不同版本。他们中的大多数都工作了,但只返回了50个链接,而不是150个链接 library(rvest) baseurl <- "https://www.ebay.co.uk/sch/i.html?_from=R40&_nkw=chain+and+sprocket&_sacat=0&_pgn=" n &

我需要收集3页的链接,每个有150个链接,使用R与rvest库。我使用for循环在页面中爬行。我知道这是一个非常基本的问题,其他地方已经回答过: 我尝试了以下代码的不同版本。他们中的大多数都工作了,但只返回了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")
}
库(rvest)

baseurl您在每次迭代中都会覆盖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"))
}

links您在每次迭代中都会覆盖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"))
}

links我们可以使用
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"
#.....
#...

我们可以使用
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"
#.....
#...

我们如何用data.frame()和rbind()来代替c()?我们如何用data.frame()和rbind()来代替c()?很好所以,向上看,如果你有三个层次的深度,你会在两个层次结束,如果在两个层次结束,你会在一个层次结束,依此类推?你是怎么在这里使用它的?@QHarr
map
就像
lappy
它返回列表,通过使用
flatte\u chr
我们把它变成字符向量。查看
lappy(1:10,sqrt)
lappy(1:10,sqrt)%%>%flatten_dbl()的输出之间的差异
Nice.+所以,向上看,如果你有三个层次的深度,你会在两个层次结束,如果在两个层次结束,你会在一个层次结束,依此类推?你是怎么在这里使用它的?@QHarr
map
就像
lappy
它返回列表,通过使用
flatte\u chr
我们把它变成字符向量。查看
lappy(1:10,sqrt)
lappy(1:10,sqrt)%%>%flatten_dbl()的输出之间的差异