我试图用两种不同的方法(xmlparse和httr::get)请求一个xml文档,并期望响应相同。
我用xmlparse得到的响应是我所期望的,但是用httr::get我的请求url在某个时候被截断了。
一个例子:

require(httr)
require(XML)
require(rvest)

term <- "alopecia areata"
request <- paste0("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi?term=",term)

#requesting URL with XML
xml_response <- xmlParse(request)

xml_response %>%
        xml_nodes(xpath = "//Result/Term") %>%
        xml_text

这应该会回来的
[1] "alopecia areata"

现在HTTR
httr_response <- GET(request)
httr_content <- content(httr_response)

httr_content %>%
        xml_nodes(xpath = "//Result/Term") %>%
        xml_text

这种回报
[1] "alopecia"

有趣的是:如果我们检查请求的url的httr_response元素,它是正确的。只有反应是错误的。
> httr_response$request$opts$url

[1] "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi?term=alopecia areata"

> httr_response$url

[1] "http://eutils.ncbi.nlm.nih.gov/gquery?term=alopecia&retmode=xml"

所以在某个时候我的查询词被截断了。如果整个请求是手动放入浏览器中的,则其行为与预期一致。
如能提出解决问题的建议,将不胜感激。

最佳答案

您可以尝试用+替换url中的空格,以防止其被截断:

httr_response <- GET(gsub(" ","+",request))
httr_content <- content(httr_response)

httr_content %>%
        xml_nodes(xpath = "//Result/Term") %>%
        xml_text

#[1] "alopecia areata"

有关空间和url的详细信息here

关于xml - URL被httr::GET与xmlParse截断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28780985/

10-09 05:27