R:xmlParse不正确"添加"额外" AND"到URL链接,解析失败

时间:2015-04-28 04:08:37

标签: xml r xml-parsing pubmed

我试图解析NIH的pubmed系统的xml输出。我已经生成了要解析的URL,但是xmlParse()函数似乎正在添加额外的" AND"将文本添加到包含运算符的URL中。

例如:

url <- 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=smith+m[author]+AND+science[journal]'
di <- xmlParse(url)
dl <- xmlToList(di)

这导致&#34; NULL&#34; IdList(结果应该在哪里):

> dl[["IdList"]]
NULL

检查QueryTranslation会显示问题(请参阅:额外AND):

> dl[["QueryTranslation"]]
[1] "smith+m[author] AND +AND+science[journal]"

知道那里发生了什么吗?这种情况发生在我构建的每个搜索字段或查询类型中,其具有诸如&#34; AND&#34;之类的运算符。或&#34;或&#34;。

一个干净的解析,找到20篇论文供参考:

> url <- 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=smith+bm[author]'
> di <- xmlParse(url)
> dl <- xmlToList(di)
> length(dl[["IdList"]])
[1] 20

1 个答案:

答案 0 :(得分:2)

假设您想从头开始而不是我上面提到的包:

首先使用httr来检索有效负载,这不会弄乱网址

library("XML")
library("httr")
url <- 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=smith+m[author]+AND+science[journal]'
res <- GET(url)
di <- xmlParse(content(res, "text"))
dl <- xmlToList(di)
unname(unlist(dl[["IdList"]]))

[1] "25745065" "25430773" "25395526" "25104368" "24458648" "24264993" "24052300" "23869013"
[9] "23363771" "22936773" "22116878" "21940895" "21330515" "21097923" "20966241" "20150469"
[17] "19407144" "19150811" "19119232" "19119226"