【发布时间】:2014-03-01 07:07:38
【问题描述】:
我想就我目前遇到的问题提出一个问题。尝试抓取 HTML 页面(使用 RCurl)时,我遇到此错误:“curlMultiPerform(multiHandle)中的错误:字符串中嵌入 nul”。我读了很多关于这种类型的错误和如何处理它的建议(包括来自 RCurl 包的创建者 Duncan Temple Lang 的一篇)。但即使在应用了他的建议(如下)之后,我也遇到了同样的错误:
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]]))
【问题讨论】:
-
@mnel: 'url' 是开源项目存储库信息的网页的 HTTP URL,例如:flossdata.syr.edu/data/fc/2013/2013-Dec。
-
htmlParse来自什么包?此外,您能否在打印输出时包含脚本,例如,很清楚错误出现在哪里(第一行或第二行)?谢谢。 -
另外,如果它在第二部分,可以尝试使用
gsub来获得大部分路径,例如gsub("<[^>]+>", "", htmlPage, perl = TRUE)。我不确定这是否正是您正在寻找的,但也许它朝着正确的方向发展? (请注意,这不是一个超级通用的解决方案,例如,我可以提出打破它的示例,但它可能适用于您正在考虑的特定页面。) -
@DavidDiez:感谢您的 cmets。实际上,这使我能够更准确地查明错误的位置 - 似乎该问题与
htmlParse无关(顺便说一句,它来自XML包)。我仍在几个地方打印调试信息,以更准确地找出问题所在和问题所在。一旦我知道更多将报告。感谢您的帮助! -
该错误意味着您正在尝试读取包含 nul 字节的二进制文件。 R 不喜欢知道如何处理它们(或者不能对它们做任何事情,这取决于你想怎么想),所以它失败了。您是否正在尝试阅读您链接到的页面?还是该页面上链接的文件之一?如果它是其中一个文件,请注意它们是经过 bzip 压缩的,因此如果不先解压缩它们(甚至有些不是文本文件),您将无法将它们转换为字符。
标签: r web-scraping rcurl