我已经构建了这个函数,我在一个约100万个URL列表的循环中运行以进行一些webscraping,但过了一段时间我的内存已满并且R关闭了。
library(tm.plugin.webmining)
getContents <- function(url) {
out <- tryCatch(
{extractContentDOM(url, asText = F,threshold=0.5)},
error=function(cond) {
message(paste("URL does not seem to exist:",
message("Here's the original error message:")
message(cond)
return(NA)},
warning=function(cond) {
message(paste("URL caused a warning:", url))
message("Here's the original warning message:")
message(cond)
return(NA)},
finally={
message(paste("Processed URL:", url))})
return(out)}
#save text
a=getContents(http://www.nytimes.com/)
如果我这样做,我总是会遇到有关内存管理的问题。基本上我遍历URL列表,提取文本,分析它。
每次运行该函数时,它会将已用内存增加几MB。然后,当您尝试使用
将内存释放到系统时rm(list = ls())
gc()
任务管理器没有显示内存已被返回给系统;一段时间后系统关闭,因为没有可用的内存。我也尝试重新启动R,但似乎没有办法在循环中重新启动R,以便循环继续。 我已经阅读了很多关于该主题的内容,但我还没有找到对该问题的正确答案。
提前感谢!
答案 0 :(得分:0)
如果您有如此大的网页抓取,我会鼓励您存储在硬盘上,因为它通过每个网站而不是内存。至少这是我过去所做的,而且效果很好。