迭代后如何组合在 rvest 循环函数中创建的对象?
How do you combine objects created in rvest looping function after an iteration?
希望你今天过得愉快。
我正在尝试在体育版块中抓取 Trustpilot 评论。
我想要四列,其中包含评论数量、信任评分、子类别和公司名称。
它应该迭代 43 个页面,每个页面有 20 个公司。
迭代后,数据应放置在先前数据的下方。不过,这可以在之后使用过滤来清理。
重要的部分,我怀疑我的问题是最后把所有东西放在一起。
代码原样产生错误
“.subset2(x, i, exact = exact) 中的错误:下标越界”
如果您对此有任何了解,将不胜感激有关如何更正代码的一些指示。
这是我遇到问题的代码:
Trustpilot_company_data <- data.frame()
page_urls = sprintf('https://dk.trustpilot.com/categories/sports?page=%s&status=all', 2:43)
page_urls = c(page_urls, 'https://dk.trustpilot.com/categories/sports?status=all')
for (i in 1:length(page_urls)) {
session <- html_session(page_urls[i])
trustscore_data_html <- html_nodes(session,'.styles_textRating__19_fv')
trustscore_data <- html_text(trustscore_data_html)
trustscore_data <- gsub("anmeldelser","",trustscore_data)
trustscore_data <- gsub("TrustScore","",trustscore_data)
trustscore_data <- as.data.frame(trustscore_data)
trustscore_data <- separate(trustscore_data, col="trustscore_data", sep="·", into=c("antal anmeldelser", "trustscore"))
number_of_reviews<- trustscore_data$`antal anmeldelser`
Trustpilot_company_data[[i]]$number_of_reviews <- trimws(number_of_reviews, whitespace = "[\h\v]") %>%
as.numeric(number_of_reviews)
trustscores <- trustscore_data$trustscore
Trustpilot_company_data[[i]]$trustscores <- trimws(trustscores, whitespace = "[\h\v]") %>%
as.numeric(trustscores)
subcategories_data_html <- html_nodes(session,'.styles_categories__c4nU-')
subcategories_data <- html_text(subcategories_data_html)
Trustpilot_company_data[[i]]$subcategories_data <- gsub("·",",",subcategories_data)
company_name_data_html <- html_nodes(session,'.styles_businessTitle__1IANo')
Trustpilot_company_data[[i]]$company_name_data <- html_text(company_name_data_html)
Trustpilot_company_data[[i]]$company_name_data <- rep(i,length(Trustpilot_company_data[[i]]$company_name_data))
}
此致
安德斯
这里似乎发生了几件事。
首先,通常,以这种方式增长数据框不是一个好习惯。
其次,在这种情况下,您似乎试图一次为每一列添加一个新元素,这让事情变得更加尴尬。您正在尝试访问数据框,就好像它是一个列表一样。因此,例如,这是行不通的:
Trustpilot_company_data[[i]]$number_of_reviews <- trimws(number_of_reviews, whitespace = "[\h\v]")
Trustpilot_company_data
是一个数据框,所以它有行和列。因此,要使用 []
访问特定的行和列,您说例如dat[5,10]
为dat
的第五行第十列。相反,您尝试使用 [[i]]
这是访问列表元素的语法。在这种情况下,您需要编写例如
Trustpilot_company_data[i, "number_of_reviews"]
访问您想要访问的内容。
第三,一次只做一栏是个坏主意。如果您要尝试增加数据框,请先 assemble 每个新的迷你数据框,然后使用 rbind()
将其添加到底部。例如,
df <- data.frame()
for(i in 1:5) {
new_piece <- data.frame(a = i,
b = i,
c = i)
df <- rbind(df, new_piece)
}
但是第四点也是最重要的一点,首先不要以这种方式增加数据帧。相反,请参阅 .
希望你今天过得愉快。
我正在尝试在体育版块中抓取 Trustpilot 评论。
我想要四列,其中包含评论数量、信任评分、子类别和公司名称。 它应该迭代 43 个页面,每个页面有 20 个公司。 迭代后,数据应放置在先前数据的下方。不过,这可以在之后使用过滤来清理。 重要的部分,我怀疑我的问题是最后把所有东西放在一起。
代码原样产生错误 “.subset2(x, i, exact = exact) 中的错误:下标越界”
如果您对此有任何了解,将不胜感激有关如何更正代码的一些指示。
这是我遇到问题的代码:
Trustpilot_company_data <- data.frame()
page_urls = sprintf('https://dk.trustpilot.com/categories/sports?page=%s&status=all', 2:43)
page_urls = c(page_urls, 'https://dk.trustpilot.com/categories/sports?status=all')
for (i in 1:length(page_urls)) {
session <- html_session(page_urls[i])
trustscore_data_html <- html_nodes(session,'.styles_textRating__19_fv')
trustscore_data <- html_text(trustscore_data_html)
trustscore_data <- gsub("anmeldelser","",trustscore_data)
trustscore_data <- gsub("TrustScore","",trustscore_data)
trustscore_data <- as.data.frame(trustscore_data)
trustscore_data <- separate(trustscore_data, col="trustscore_data", sep="·", into=c("antal anmeldelser", "trustscore"))
number_of_reviews<- trustscore_data$`antal anmeldelser`
Trustpilot_company_data[[i]]$number_of_reviews <- trimws(number_of_reviews, whitespace = "[\h\v]") %>%
as.numeric(number_of_reviews)
trustscores <- trustscore_data$trustscore
Trustpilot_company_data[[i]]$trustscores <- trimws(trustscores, whitespace = "[\h\v]") %>%
as.numeric(trustscores)
subcategories_data_html <- html_nodes(session,'.styles_categories__c4nU-')
subcategories_data <- html_text(subcategories_data_html)
Trustpilot_company_data[[i]]$subcategories_data <- gsub("·",",",subcategories_data)
company_name_data_html <- html_nodes(session,'.styles_businessTitle__1IANo')
Trustpilot_company_data[[i]]$company_name_data <- html_text(company_name_data_html)
Trustpilot_company_data[[i]]$company_name_data <- rep(i,length(Trustpilot_company_data[[i]]$company_name_data))
}
此致 安德斯
这里似乎发生了几件事。
首先,通常,以这种方式增长数据框不是一个好习惯。
其次,在这种情况下,您似乎试图一次为每一列添加一个新元素,这让事情变得更加尴尬。您正在尝试访问数据框,就好像它是一个列表一样。因此,例如,这是行不通的:
Trustpilot_company_data[[i]]$number_of_reviews <- trimws(number_of_reviews, whitespace = "[\h\v]")
Trustpilot_company_data
是一个数据框,所以它有行和列。因此,要使用 []
访问特定的行和列,您说例如dat[5,10]
为dat
的第五行第十列。相反,您尝试使用 [[i]]
这是访问列表元素的语法。在这种情况下,您需要编写例如
Trustpilot_company_data[i, "number_of_reviews"]
访问您想要访问的内容。
第三,一次只做一栏是个坏主意。如果您要尝试增加数据框,请先 assemble 每个新的迷你数据框,然后使用 rbind()
将其添加到底部。例如,
df <- data.frame()
for(i in 1:5) {
new_piece <- data.frame(a = i,
b = i,
c = i)
df <- rbind(df, new_piece)
}
但是第四点也是最重要的一点,首先不要以这种方式增加数据帧。相反,请参阅