采取以下网址
URL <- "http://www.google.de/complete/search?output=toolbar&q=TDS38311DE"
doc <- read_xml(URL)
我收到以下错误:
Error: Input is not proper UTF-8, indicate encoding !
Bytes: 0xDF 0x20 0x2F 0x20 [9]
使用read_html
代替一切都很好
难道我做错了什么?为什么会出现这种错误?
答案 0 :(得分:2)
首先:rvest
使用xml2
来获取内容,因此您应该在该包gh vs rvest
下提交与之相关的任何问题。
其次,read_xml
选择 encoding
参数是有原因的,是这样说的:“除非另有说明,否则假设XML文档如果文档不是UTF-8/16,并且缺少明确的编码指令,则允许您提供默认值。“
XML文件具有specify an encoding的能力,但谷歌的这种“AJAX-y”响应显然不是(并且它不是预期你会被盗的东西,它知道它正在被阅读 - 通常是 - HTML解析引擎[又名浏览器],而不是XML解析引擎。
rvest
曾经这样做过:
encoding <- encoding %||% default_encoding(x)
xml2::read_xml(httr::content(x, "raw"), encoding = encoding, base_url = x$url,
as_html = as_html)
default_encoding
执行此操作:
default_encoding <- function(x) {
type <- httr::headers(x)$`Content-Type`
if (is.null(type)) return(NULL)
media <- httr::parse_media(type)
media$params$charset
}
但是rvest
现在只公开read_xml
和session
对象的response
方法(它进行编码猜测)。
所以,你可以:
httr
抓取页面并将其传递给read_xml
或