使用rvest进行刮取和循环的简单解决方案,将for循环的结果存储在变量中
我需要收集3页的链接,每个有150个链接,使用R与rvest库。我使用for循环在页面中爬行。我知道这是一个非常基本的问题,其他地方已经回答过: 我尝试了以下代码的不同版本。他们中的大多数都工作了,但只返回了50个链接,而不是150个链接使用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 &
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()?很好所以,向上看,如果你有三个层次的深度,你会在两个层次结束,如果在两个层次结束,你会在一个层次结束,依此类推?你是怎么在这里使用它的?@QHarrmap
就像lappy
它返回列表,通过使用flatte\u chr
我们把它变成字符向量。查看lappy(1:10,sqrt)
和lappy(1:10,sqrt)%%>%flatten_dbl()的输出之间的差异Nice.+所以,向上看,如果你有三个层次的深度,你会在两个层次结束,如果在两个层次结束,你会在一个层次结束,依此类推?你是怎么在这里使用它的?@QHarrmap
就像lappy
它返回列表,通过使用flatte\u chr
我们把它变成字符向量。查看lappy(1:10,sqrt)
和lappy(1:10,sqrt)%%>%flatten_dbl()的输出之间的差异