我正在做一个网站的网络抓取。当我从网站获取数据时,每个页面都有 10 个观察值。我正在编写一个函数,您可以在其中指定要抓取的页面数,最后将其存储在列表中,然后将其转换为数据帧。
library(jsonlite)
forum_data_fetch <- function(no_of_pages) {
pages <- seq(no_of_pages)
#print(pages)
forum_data <- list()
for(i in 1:length(pages)){
tmp <- fromJSON(paste("http://mmb.moneycontrol.com/index.php?q=topic/ajax_call§ion=get_messages&offset=&lmid=&isp=0&gmt=cat_lm&catid=1&pgno=",i,sep=""))
forum_data[[i]] <- tmp
}
dat <- as.data.frame(forum_data)
dat <- dat[,c("msg_id","border_msg_count","user_id","border_level_text","follower_count", "topic", "tp_sector","tp_msg_count","heading", "flag", "price", "message")]
return(dat)
}
test <- forum_data_fetch(3)
理想情况下,上述函数返回 30 个观察值,但它只返回 10 个。我认为我在将列表存储为 data.frame 时做错了什么
不是向现有列添加新行,而是添加as.data.frame(forum_data)
具有相同名称的新列(即变量)。请do.call(rbind, forum_data)
改用:
dat1 <- as.data.frame(forum_data)
str(dat1)
# data.frame': 10 obs. of 219 variables:
# $ TOTAL_MSG_CNT : int 50000 NA NA NA NA NA NA NA NA NA
# $ msg_id : chr "47754017" "47754014" "47751119" "47746189" ...
# $ user_id : chr "rajeshatharv" "bullbuffet" "csr93" "sanjiv3312" ...
# ....
dat2 <- do.call(rbind, forum_data)
str(dat2)
# 'data.frame': 30 obs. of 73 variables:
# $ TOTAL_MSG_CNT : int 50000 NA NA NA NA NA NA NA NA NA ...
# $ msg_id : chr "47754017" "47754014" "47751119" "47746189" ...
# $ user_id : chr "rajeshatharv" "bullbuffet" "csr93" "sanjiv3312" ...
# ....
然后只需选择要使用的列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句