R在网页抓取过程中的内存管理

3

我已经编写了这个函数,并在循环中运行它,以便对大约100万个URL进行网页抓取,但是一段时间后我的内存已满,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,以便循环继续进行。
我已经阅读了很多关于这个问题的文章,但是我还没有找到一个合适的答案。
谢谢!
1个回答

1
如果您有如此大规模的网页抓取,我建议您将其存储在硬盘上,而不是存储在内存中。至少这是我过去所做的,效果非常好。

即使我这样做,内存问题仍未解决;它不会循环遍历所有的URL。 - NMM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接