我想问一个问题,关于我目前困在这个问题上。在尝试抓取HTML页面时(使用RCurl),我会遇到这样的错误:“curlMultiPerform中的错误(MultiHandle):string中的embedded nul”。我读了很多关于这类错误的文章,以及关于如何处理它的建议(包括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。
“链接”是文件的完整URL列表,构造如下:
links <- lapply(filenames, function(x) paste(url, x, sep="/"))通过使用links[i],我试图在正在进行的‘list ()’迭代中引用链接列表的当前元素。
第二版:
目前,我正在为下面的代码而挣扎。我发现了更多的案例,人们建议完全相同的方法,这让我好奇为什么它在我的情况下行不通.
getData <- function(x) try(read.table(bzfile(x), sep = ",", row.names = NULL))
data <- lapply(seq_along(links), function(i) getData(links[[i]]))发布于 2014-02-16 16:15:28
我能够找出上述问题的原因。这花了我大量的时间和精力,但这是值得的-现在我更了解R lists和lapply()。
基本上,我做了三大改变:
1)在处理类CSV文件时添加了textConnection()和readLines():
conn <- gzcon(bzfile(file, open = "r"))
tConn <- textConnection(readLines(conn))然而,我发现了这种方法的一些问题--参见我的另一个如此问题:Extremely slow R code and hanging。
2)使用正确的订阅表示法来引用传递给function(i)的lapply()中适当的列表元素
url <- links[[1]][i]3)使用正确的订阅符号来引用lapply()的整个列表
data <- lapply(seq_along(links[[1]]), getData)感谢所有参与并帮助回答这个问题的人!
发布于 2014-02-09 05:04:54
萨沙
尝尝这个
library(XML)
url <- "http://flossdata.syr.edu/data/fc/2013/2013-Dec/"
doc <- htmlParse(url)
ndx <- getNodeSet(doc,"//table")就像一种魅力。
祝好运。
S.
https://stackoverflow.com/questions/21567304
复制相似问题