使用RCurl获取R矢量中的网站目录列表

FBC*_*FBC 5 r rcurl

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

library(RCurl)    
text=getURL(*some https website*
,ssl.verifypeer = FALSE
,dirlistonly = TRUE)
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

编辑:如果你可以使用http://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeGencodeV7/,那么你会明白我的意思.

Dag*_*ann 5

这是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 = "")
Run Code Online (Sandbox Code Playgroud)

这样可以解决您的问题吗?


Rac*_*len 1

我正在阅读RCurl 文档,发现了一段新代码:

\n\n
stockReader =\nfunction()\n{\nvalues <- numeric() # to which the data is appended when received\n# Function that appends the values to the centrally stored vector\nread = function(chunk) {\ncon = textConnection(chunk)\non.exit(close(con))\ntmp = scan(con)\nvalues <<- c(values, tmp)\n}\nlist(read = read,\nvalues = function() values # accessor to get result on completion\n)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

其次是

\n\n
reader = stockReader()\ngetURL(\xe2\x80\x99http://www.omegahat.org/RCurl/stockExample.dat\xe2\x80\x99,\nwrite = reader$read)\nreader$values()\n
Run Code Online (Sandbox Code Playgroud)\n\n

它在示例中显示“数字”,但是这个代码示例肯定可以修改吗?阅读所附文件。我相信您会找到您正在寻找的东西。

\n\n

它还说

\n\n
\n

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

\n
\n