Regex 在R中列出HTTP/FTP服务器上的文件

Regex 在R中列出HTTP/FTP服务器上的文件,regex,r,html-parsing,text-parsing,Regex,R,Html Parsing,Text Parsing,我正在尝试从R!获取HTTP/FTP服务器上的文件列表!,因此,在下一步中,我将能够下载它们(或者选择一些符合我的标准的文件进行下载) 我知道可以在web浏览器(下载管理器)中使用外部程序,该程序允许我选择要从当前网页/ftp下载的文件。然而,我希望一切都有脚本,这样我将更容易复制 我想从R调用Python!(因为这看起来容易多了),但我试着完全用R 我写了以下几行 require("RCurl") result <- getURL("http://server",verbose=TRU

我正在尝试从R!获取HTTP/FTP服务器上的文件列表!,因此,在下一步中,我将能够下载它们(或者选择一些符合我的标准的文件进行下载)

我知道可以在web浏览器(下载管理器)中使用外部程序,该程序允许我选择要从当前网页/ftp下载的文件。然而,我希望一切都有脚本,这样我将更容易复制

我想从R调用Python!(因为这看起来容易多了),但我试着完全用R

我写了以下几行

require("RCurl") 
result <- getURL("http://server",verbose=TRUE,ftp.use.epsv=TRUE, dirlistonly = TRUE)
样本内容如下:


有趣的文件_20150629.txt20 Aug-2015 09:31 289K\n正在测试 文件_20150630.txt20 2015年8月09:31 293K\n安装 文件_20150701.txt20 2015年8月09:31 301K\n安装 文件_20150702.txt20 2015年8月09:31 304K\n安装 文件_20150703.txt20 2015年8月09:31 301K\n安装 文件_20150704.txt20 2015年8月09:31 300K\n安装 文件_20150705.txt20 2015年8月09:31 300K\n安装 文件_20150706.txt20 2015年8月09:31 305K\n安装 文件_20150707.txt20 2015年8月09:31 305K\n安装 文件_20150708.txt20 2015年8月09:31 301K\n安装 文件_20150709.txt20 2015年8月09:31 294K\n
\n\n\n“


现在,我尝试解析结果内容:

myFiles <- strsplit(result,'<a[^>]* href=\\"([^"]*.txt)\\"')[[1]]

myFiles你真的不应该在html上使用正则表达式。XML的
XML
包让这变得非常简单。我们可以使用
gethtmlinks()
来收集我们想要的任何链接

library(XML)
getHTMLLinks(result)
#  [1] "Interesting file_20150629.txt"   "Interesting file_20150630.txt"  
#  [3] "Interesting file_20150701.txt"   "Interesting file_20150702.txt"  
#  [5] "Interesting file_20150703.txt"   "Interesting file_20150704.txt"  
#  [7] "Interesting file_20150705.txt"   "Interesting file_20150706.txt"  
#  [9] "Interesting file_20150707.txt"   "Interesting file_20150708.txt"  
# [11] "Interesting file_20150709.txt"  
这将获得
/@href
中包含的所有
//a
链接。若要仅获取中包含
.txt
的链接,可以使用不同于默认值的XPath查询

getHTMLLinks(result, xpQuery = "//a/@href[contains(., '.txt')]")
或者更准确地说,要获取那些以
.txt
结尾的文件,您可以

getHTMLLinks(
    result,
    xpQuery = "//a/@href['.txt'=substring(., string-length(.) - 3)]"
) 

另一种不加载其他库的方法是打开ftp.use.epsv=FALSE和crlf=TRUE。这将指示libcurl将\n更改为\r\n:

require("RCurl") 
result <- getURL("http://server",verbose=TRUE,ftp.use.epsv=FALSE, dirlistonly = TRUE, crlf = TRUE)
require(“RCurl”)

结果很好的回答!我仍然不知道我的正则表达式出了什么问题,但是你的解决方案非常有效!!!是的,代码很好。这对我帮助很大。特别是最后两部分。
getHTMLLinks(
    result,
    xpQuery = "//a/@href['.txt'=substring(., string-length(.) - 3)]"
) 
require("RCurl") 
result <- getURL("http://server",verbose=TRUE,ftp.use.epsv=FALSE, dirlistonly = TRUE, crlf = TRUE)
result2 <- paste("http://server", strsplit(result, "\r*\n")[[1]], sep = "")