r - 错误curlMultiperform(多句柄): embedded nul in string

标签 r curl rcurl

我正在尝试下载链接向量,但收到一条错误消息,我不知道该怎么办。包含代码,希望有人有解决方法。

代码:

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/

相关文章:

curl - 如何在 Windows 7 32 位上运行 paypal 的 cURL 示例?

xml - "Non-zero exit status"下载 XML 和 RCurl R 包时出错

r - ggplot2 : don't connect dots if gap in time

sql - R 中的粘贴函数在构建 SQL 查询时不起作用

linux - nagios.log 上的 Nagios SMS 通知错误

python如何在重定向后获取最终目的地

r - Speedlm更新 "need object with call component"

r - setDT() 有意想不到的副作用

r - R 中使用 Twitter Streaming API 进行 Oauth(使用 RCurl)

r - 使用 RCurl 中的 getURL 将查询参数设置为 RESTful API