我正在尝试下载链接向量,但收到一条错误消息,我不知道该怎么办。包含代码,希望有人有解决方法。
代码:
library(RCurl)
library(XML)
url <- "http://www.etfs.bmo.com/bmo-etfs/"
url.parsed <- htmlParse(url)
links <- xpathSApply(url.parsed, "//table//td/a/@href")[-c(1:3)]
links <- paste0("http://www.etfs.bmo.com", links)
pages <- getURI(links)
错误消息:
Error in curlMultiPerform(multiHandle) :
embedded nul in string: ' \r\n </nobr>\r\n </td>\r\n\t\t\t </tr>\r\n\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t \t<tr valign="top" >\r\n\t \t\t\t\t<td class="highlightText"><strong>Annualized Distribution Yield \r\n\t\t \t\t\t\r\n\t\t \t \t\t\t\t\r\n\t\t \t \t\t\t(Jul 07, 2016)\r\n\t\t \t \t\t\t\t\r\n\t\t \t \t\t\t \r\n\t\t \t\t\t\t\t<sup>1</sup></strong>\r\n\t\t \t\t\t\t</td>\r\n\t\t\t \t\t<td>\r\n \t\t<nobr>\r\n \t \t\t\r\n \t \t\t\t\r\n \t \t\t\t\r\n\t\t\t \t \t\t\t\t2.41%\r\n \t \t\t\t\r\n \t\t\t\t \r\n \t \t</nobr>\r\
最佳答案
好吧,这花了一段时间,但我想我已经弄清楚了。
事实证明,网页编码不正确。它声称是“ISO-8859-1”,但在某些页面上有编码为 \x99
的商标符号,这意味着它可能确实使用“Windows-1252”代码页。这个超出正常 ASCII 范围的符号会启动多字节字符读取,文件很快就会变得困惑。
据我所知,RCurl 本身不支持这种编码。但您仍然可以将文件下载为二进制数据,然后使用具有更多转换选项的 iconv 进行转换。这应该有效
raw <- lapply(links, getURLContent, binary=TRUE)
pages <- lapply(lapply(raw,readBin,"characer"),
iconv, from="WINDOWS-1252", to="UTF-8")
现在我在我的 Mac 上测试了这个。确切的 from/to 字符串可能因平台而异。如果该功能在您的计算机上不起作用,请检查 iconvlist()
中的列表,以获取 from=
值的可能替换项。
关于r - 错误curlMultiperform(多句柄): embedded nul in string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25090225/