【问题标题】:R memory management while webscraping网页抓取时的 R 内存管理
【发布时间】:2016-05-19 14:41:59
【问题描述】:

我已经构建了这个函数,我在大约 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,以便之后循环继续。 我已经阅读了很多关于该主题的内容,但我还没有找到该问题的正确答案。

提前致谢!

【问题讨论】:

    标签: r memory memory-management web-scraping


    【解决方案1】:

    如果您有如此大的网络抓取,我建议您将每个站点的数据存储在硬盘上,而不是存储在内存中。至少这是我过去所做的,并且效果非常好。

    【讨论】:

    • 即使我这样做了,内存问题仍然没有解决;它不会遍历所有 URL
    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多