如何修复此RCurl错误?

时间:2014-02-05 02:02:23

标签: r web-scraping rcurl

我想就我目前遇到的问题提出一个问题。当试图刮取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]]))

2 个答案:

答案 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 listslapply()

基本上,我做了三个主要的改变:

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()

感谢所有参与并帮助回答此问题的人!