rbind by for 循环并从网页中抓取
rbind by for loop with scraping from Webpage
我正在尝试从网页中抓取数据并rbind
它。
1。从网页抓取数据
for (i in 1:10) {
url <- paste0("https://www.nest.co.uk/pendants?page=",i)
Pandents <- read_html(url)
PanInfos <- html_nodes(Pandents, css = '.fn.name')
PanInfos[1] %>% html_nodes('.brand') %>% html_text()
2。提取 "BRANDS"
BRANDS <- PanInfos %>% html_nodes('.brand') %>% html_text()
3。删除 unicode 并提取 "SHORTNAMES"
panShortnames <- PanInfos %>% html_nodes('.short-name') %>% html_text()
SHORT1 <- gsub(pattern = '\U00A0', replacement = " ", panShortnames)
SHORTNAMES <- gsub(pattern = '\U2013', replacement = "-", SHORT1)
4。提取 "PRICE"
PriceInfos <- html_nodes(Pandents, css = '.info')
PRICE <- PriceInfos %>% html_nodes('.price') %>% html_text()
5。使用 "IF"
制作数据框
if ( i == 1) {
data1<- data.frame(BRANDS, SHORTNAMES, PRICE)
}
else if (i ==2) {
data2<- data.frame(BRANDS, SHORTNAMES, PRICE)
}
###......
else (i ==10) {
data10<- data.frame(BRANDS, SHORTNAMES, PRICE)
}
}
6。制作最终数据框
FINAL <- rbind(data1, data2, data3, data4, data5, data6, data7, data8, data9,data10)
第一次练习R,终于知道R的复杂了。
我想做的是从网页中提取数据并制作一个 csv 文件。
但它根本不起作用。我真的需要你的建议。我的怎么了?
有没有更简单的方法
我想这就是您要达到的目的?
加载用于网络抓取的库
library(xml2)
library(rvest)
首先,创建一个虚拟变量列表来存储数据
pass <- paste0("dat", 1:10)
取出每一页并将信息存入dat1-dat10
for(i in 1:10){
url <- paste0("https://www.nest.co.uk/pendants?page=", i)
assign(pass[i], read_html(url))
}
为了将来方便循环,请列出 dat1 - dat10
datalist <- list(dat1, dat2, dat3, dat4, dat5, dat6, dat7, dat8, dat9, dat10)
设置虚拟数据框
brand <- paste0("brand", 1:24)
dfbrand <- as.data.frame(brand)
遍历 dat1 - dat10,提取名称信息并附加到 dfbrand
"length(BRANDS) <- nrow(dfbrand)" 确保行数相同以确保 cbind 工作
for (i in datalist){
PanInfos <- html_nodes(i, css = '.fn.name')
BRANDS <-
PanInfos %>%
html_nodes('.brand') %>%
html_text()
length(BRANDS) <- nrow(dfbrand)
BRANDS <- as.data.frame(BRANDS)
dfbrand <- cbind(dfbrand, BRANDS)
}
名称和价格也一样,我没有发现提取名称和使用 gsub 有任何区别,所以我排除了这些步骤
name <- paste0("name", 1:24)
dfname <- as.data.frame(name)
for (i in datalist){
PanInfos <- html_nodes(i, css = '.fn.name')
NAMES <-
PanInfos %>%
html_nodes('.short-name') %>%
html_text()
length(NAMES) <- nrow(dfname)
NAMES <- as.data.frame(NAMES)
dfname <- cbind(dfname, NAMES)
}
price <- paste0("price", 1:24)
dfprice <- as.data.frame(price)
for (i in datalist){
PanInfos <- html_nodes(i, css = '.info')
PRICE <-
PanInfos %>%
html_nodes('.price') %>%
html_text()
length(PRICE) <- nrow(dfprice)
PRICE <- as.data.frame(PRICE)
dfprice <- cbind(dfprice, PRICE)
}
最后,取出每一行数据并将它们附加到一个新的数据框中
使用 [i+1] 中的 +1,因为我们的原始虚拟数据框包含第 1 列中的占位符信息
pass2 <- paste0("scrapeddat", 1:10)
for (i in 1:10) {
assign(pass2[i], data.frame(dfbrand[i+1], dfname[i+1], dfprice[i+1]))
}
如果这对您有帮助或者您还有其他问题,请告诉我!
我正在尝试从网页中抓取数据并rbind
它。
1。从网页抓取数据
for (i in 1:10) {
url <- paste0("https://www.nest.co.uk/pendants?page=",i)
Pandents <- read_html(url)
PanInfos <- html_nodes(Pandents, css = '.fn.name')
PanInfos[1] %>% html_nodes('.brand') %>% html_text()
2。提取 "BRANDS"
BRANDS <- PanInfos %>% html_nodes('.brand') %>% html_text()
3。删除 unicode 并提取 "SHORTNAMES"
panShortnames <- PanInfos %>% html_nodes('.short-name') %>% html_text()
SHORT1 <- gsub(pattern = '\U00A0', replacement = " ", panShortnames)
SHORTNAMES <- gsub(pattern = '\U2013', replacement = "-", SHORT1)
4。提取 "PRICE"
PriceInfos <- html_nodes(Pandents, css = '.info')
PRICE <- PriceInfos %>% html_nodes('.price') %>% html_text()
5。使用 "IF"
制作数据框if ( i == 1) {
data1<- data.frame(BRANDS, SHORTNAMES, PRICE)
}
else if (i ==2) {
data2<- data.frame(BRANDS, SHORTNAMES, PRICE)
}
###......
else (i ==10) {
data10<- data.frame(BRANDS, SHORTNAMES, PRICE)
}
}
6。制作最终数据框
FINAL <- rbind(data1, data2, data3, data4, data5, data6, data7, data8, data9,data10)
第一次练习R,终于知道R的复杂了。 我想做的是从网页中提取数据并制作一个 csv 文件。 但它根本不起作用。我真的需要你的建议。我的怎么了? 有没有更简单的方法
我想这就是您要达到的目的?
加载用于网络抓取的库
library(xml2)
library(rvest)
首先,创建一个虚拟变量列表来存储数据
pass <- paste0("dat", 1:10)
取出每一页并将信息存入dat1-dat10
for(i in 1:10){
url <- paste0("https://www.nest.co.uk/pendants?page=", i)
assign(pass[i], read_html(url))
}
为了将来方便循环,请列出 dat1 - dat10
datalist <- list(dat1, dat2, dat3, dat4, dat5, dat6, dat7, dat8, dat9, dat10)
设置虚拟数据框
brand <- paste0("brand", 1:24)
dfbrand <- as.data.frame(brand)
遍历 dat1 - dat10,提取名称信息并附加到 dfbrand
"length(BRANDS) <- nrow(dfbrand)" 确保行数相同以确保 cbind 工作
for (i in datalist){
PanInfos <- html_nodes(i, css = '.fn.name')
BRANDS <-
PanInfos %>%
html_nodes('.brand') %>%
html_text()
length(BRANDS) <- nrow(dfbrand)
BRANDS <- as.data.frame(BRANDS)
dfbrand <- cbind(dfbrand, BRANDS)
}
名称和价格也一样,我没有发现提取名称和使用 gsub 有任何区别,所以我排除了这些步骤
name <- paste0("name", 1:24)
dfname <- as.data.frame(name)
for (i in datalist){
PanInfos <- html_nodes(i, css = '.fn.name')
NAMES <-
PanInfos %>%
html_nodes('.short-name') %>%
html_text()
length(NAMES) <- nrow(dfname)
NAMES <- as.data.frame(NAMES)
dfname <- cbind(dfname, NAMES)
}
price <- paste0("price", 1:24)
dfprice <- as.data.frame(price)
for (i in datalist){
PanInfos <- html_nodes(i, css = '.info')
PRICE <-
PanInfos %>%
html_nodes('.price') %>%
html_text()
length(PRICE) <- nrow(dfprice)
PRICE <- as.data.frame(PRICE)
dfprice <- cbind(dfprice, PRICE)
}
最后,取出每一行数据并将它们附加到一个新的数据框中
使用 [i+1] 中的 +1,因为我们的原始虚拟数据框包含第 1 列中的占位符信息
pass2 <- paste0("scrapeddat", 1:10)
for (i in 1:10) {
assign(pass2[i], data.frame(dfbrand[i+1], dfname[i+1], dfprice[i+1]))
}
如果这对您有帮助或者您还有其他问题,请告诉我!