8

我正在尝试获取网站目录中的文件列表。有没有一种类似于本地目录列表的 dir() 或 list.files() 命令的方法?我可以使用 RCurl 连接到网站(我需要它,因为我需要通过 HTTPS 进行 SSL 连接):

library(RCurl)    
text=getURL(*some https website*
,ssl.verifypeer = FALSE
,dirlistonly = TRUE)

但这会创建一个包含文件列表的图像、超链接等的 HTML 文件,但我只需要一个文件的 R 向量,就像使用 dir() 获得的一样。这可能吗?还是我必须进行 HTML 解析才能提取文件名?听起来像一个简单问题的复杂方法。

谢谢,

编辑:如果你可以让它与http://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeGencodeV7/一起工作,那么你会明白我的意思。

4

3 回答 3

6

这是 getURL 帮助文件中的最后一个示例(带有更新的 URL):

url <- 'ftp://speedtest.tele2.net/'
filenames = getURL(url, ftp.use.epsv = FALSE, dirlistonly = TRUE)


# Deal with newlines as \n or \r\n. (BDR)
# Or alternatively, instruct libcurl to change \n’s to \r\n’s for us with crlf = TRUE
# filenames = getURL(url, ftp.use.epsv = FALSE, ftplistonly = TRUE, crlf = TRUE)
filenames = paste(url, strsplit(filenames, "\r*\n")[[1]], sep = "")

这能解决你的问题吗?

于 2013-06-19T09:21:09.337 回答
2

尝试这个:

   library(RCurl)

   dir_list <-
     read.table(
       textConnection(
         getURLContent(ftp://[...]/)
       )
     sep = "",
     strip.white = TRUE)

结果表将日期分成 3 个文本字段,但这是一个很好的开始,您可以获取文件名。

于 2017-08-23T18:38:18.190 回答
1

我正在阅读RCurl 文档并遇到了一段新代码:

stockReader =
function()
{
values <- numeric() # to which the data is appended when received
# Function that appends the values to the centrally stored vector
read = function(chunk) {
con = textConnection(chunk)
on.exit(close(con))
tmp = scan(con)
values <<- c(values, tmp)
}
list(read = read,
values = function() values # accessor to get result on completion
)
}

其次是

reader = stockReader()
getURL(’http://www.omegahat.org/RCurl/stockExample.dat’,
write = reader$read)
reader$values()

它在示例中显示“数字”,但肯定可以修改此代码示例吗?阅读附件。我相信你会找到你要找的东西。

它还说

getURL()、getForm() 和 postForm() 的基本使用将请求文档的内容作为单个文本块返回。它由 libcurl 工具累积并组合成一个字符串。然后,我们通常会遍历文档的内容以将信息提取到常规数据中,例如向量和数据帧。例如,假设我们请求的文档是一个简单的数字流,例如特定股票在不同时间点的价格。我们将下载文件的内容,然后将其读入 R 中的向量,以便我们可以分析这些值。不幸的是,这实际上导致两个数据副本同时驻留在内存中。对于大型数据集,这可能是令人望而却步的,或者至少是不可取的。另一种方法是在 libcurl 接收到数据时以块的形式处理数据。如果我们可以在每次 libcurl 从回复中接收到数据并对数据做一些有意义的事情时得到通知,那么我们就不需要累积这些块。我们需要拥有的最大的额外信息是最大的块。在我们的示例中,我们可以获取每个块并将其传递给 scan() 函数以将值转换为向量。然后我们可以将它与来自先前处理的块的向量连接起来。我们可以获取每个块并将其传递给 scan() 函数以将值转换为向量。然后我们可以将它与来自先前处理的块的向量连接起来。我们可以获取每个块并将其传递给 scan() 函数以将值转换为向量。然后我们可以将它与来自先前处理的块的向量连接起来。

于 2013-05-22T19:33:00.170 回答