R:xmlParse错误地“解析”;加入“;额外的;及;到URL链接,解析失败

R:xmlParse错误地“解析”;加入“;额外的;及;到URL链接,解析失败,xml,r,xml-parsing,pubmed,Xml,R,Xml Parsing,Pubmed,我试图解析来自NIH的pubmed系统的xml输出。我已经生成了要解析的URL,但是xmlParse()函数似乎在向包含运算符的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

我试图解析来自NIH的pubmed系统的xml输出。我已经生成了要解析的URL,但是xmlParse()函数似乎在向包含运算符的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)
检查QueryTranslation会发现问题(请参阅:extra和):

知道那里发生了什么吗?这发生在我构造的每个搜索字段或查询类型中,这些字段或查询具有诸如“AND”或“or”之类的运算符

一个干净的解析,可以找到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
>url-di-dl-length(dl[[“IdList”]]
[1] 20

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

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

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"
库(“XML”)
图书馆(“httr”)

url为了让生活更轻松,您可以使用一个已经构建的R客户端,例如,或者(我认为还有其他客户端)浏览到第一个地址时产生了与您看到的不同的
查询翻译。您是否尝试过使用调试代理(如Windows上的Fiddler或Mac或Linux上的mitmproxy)查看事务?PubMed将修改或向任何搜索添加其他术语,以使用自动术语映射及其搜索规则优化检索,包括此处发生的两个概念之间的术语。试着在PubMed上运行搜索并检查右边的搜索细节,但是即使是《科学》杂志也会翻译成别的东西,你也可能想要“科学”杂志,让XMLPARSE处理空白空间并尝试<代码> URL。
> 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
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"