2016-05-19 2 views
3

ウェブスクラッピングを行うために1百万個のURLのリストをループして実行するこの機能を構築しましたが、しばらくしてからメモリがいっぱいになり、Rがシャットダウンします。ウェブスクラビング中の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のリストをループし、テキストを抽出して分析します。

この関数を実行するたびに、使用されているメモリがいくらか増加します。あなたはその後、

rm(list = ls()) 
gc() 

でシステムにメモリを解放しようとすると、タスクマネージャは、メモリがシステムに戻す与えられていることを示していないしません。使用可能なメモリが残っていないため、しばらくしてからシステムシャットダウンが発生します。また、Rを再起動しようとしましたが、ループを再起動する方法がないように見えるので、後でループが実行されます。 Iveはすでにそのトピックについて多くのことを読んでいますが、その問題に対する適切な答えはまだ見つかりませんでした。

ありがとうございます!

答えて

0

このような大規模なウェブスクレイピングがある場合は、メモリではなくサイトごとにハードドライブに保存することをおすすめします。少なくともそれは私が過去にやったことであり、本当にうまくいっています。

+0

私がそれを行っても、メモリの問題はまだ解決されません。すべてのURLをループしません – NMM