我想就我目前遇到的问题提出一个问题。当试图刮取HTML页面(使用RCurl)时,我遇到了这个错误:“curlMultiPerform(multiHandle)中的错误:在字符串中嵌入nul”。我读了很多关于这种类型的错误以及如何处理它的建议(包括来自Duncan Temple Lang的一个,RCurl包的创建者)。但即使在应用他的建议(如下)之后,我也会遇到同样的错误:
htmlPage <- rawToChar(getURLContent(url, followlocation = TRUE, binary = TRUE))
doc <- htmlParse(htmlPage, asText=TRUE)
我错过了什么吗?任何帮助将不胜感激!
修改
但是,我在原帖中没有提到第二个错误。它出现在这里:
data <- lapply(i <- 1:length(links),
function(url) try(read.table(bzfile(links[i]),
sep=",", row.names=NULL)))
错误:Error in bzfile(links[i]) : invalid 'description' argument
。
'links'是文件的完整URL列表,构造如下:
links <- lapply(filenames, function(x) paste(url, x, sep="/"))
通过使用links[i]
,我试图在`lapply()的持续迭代中引用链接列表的当前元素。
第二次修改:
目前我正在努力使用以下代码。我发现了几个案例,人们建议采用完全相同的方法,这让我很好奇为什么它在我的情况下不起作用......
getData <- function(x) try(read.table(bzfile(x), sep = ",", row.names = NULL))
data <- lapply(seq_along(links), function(i) getData(links[[i]]))
答案 0 :(得分:0)
萨沙,
试试这个
library(XML)
url <- "http://flossdata.syr.edu/data/fc/2013/2013-Dec/"
doc <- htmlParse(url)
ndx <- getNodeSet(doc,"//table")
它就像一个魅力。
祝你好运。S上。
答案 1 :(得分:0)
我能够弄清楚上述问题的原因。我花了很多时间和精力,但这是值得的 - 现在我更了解R lists
和lapply()
。
基本上,我做了三个主要的改变:
1)添加了textConnection()
和readLines()
来处理类似CSV的文件:
conn <- gzcon(bzfile(file, open = "r"))
tConn <- textConnection(readLines(conn))
但是,我发现了这种方法的一些问题 - 请参阅我的其他问题:Extremely slow R code and hanging。
2)使用正确的订阅表示法来引用传递给function(i)
的{{1}}内的列表的相应元素:
lapply()
3)使用正确的订阅表示法来引用url <- links[[1]][i]
的整个列表:
lapply()
感谢所有参与并帮助回答此问题的人!