R2-20 第二阶段第一次

科研狗聪 2018-01-23 22:00:36 阅读: 1033
#任务1
install.packages("httr")
library(httr)

#模块一:搜索所需信息
baseUrl="https://eutils.ncbi.nlm.nih.gov/"
pubmedAction=list(base="entrez/eutils/index.fcgi",
  search="entrez/eutils/esearch.fcgi", #搜索接口
  fetch="entrez/eutils/efetch.fcgi", #获取数据接口
  summary="entrez/eutils/esummary.fcgi" #获取数据接口(fetch可返回多种数据格式)) #搜索文章的参数
  
#模块二:将请求的各项数据整理为表格  
searchArticleParam=list(retstart=0, #起始位置 
  retmax=20, #每次取的数量
  usehistory='Y',#是否使用历史搜索
  querykey='',
  webenv='',
  term='(cell[TA]) AND 2017[DP]',#提交pubmed的词, 
  total_num=0, #总记录
  total_page=1, #总页数
  page_size=20, #每页数目
  current_page=1 #当前所在页数
  )#不知道为啥好像一定要空行才行

#向网站发送请求信息
postSearchUrl=paste(baseUrl,pubmedAction$search,sep="") #拼接搜索地址
r <- POST(postSearchUrl, #post发送内容
          body = list(db='pubmed',
            term=searchArticleParam$term,
            retmode='json',#解析json数据(一种存高维键值对的格式)
            retstart=searchArticleParam$retstart,
            retmax=searchArticleParam$retmax,
            usehistory=searchArticleParam$usehistory,
            rettype='uilist'))
stop_for_status(r) #清除http状态字符串,获取信息后停止请求

#模块三:整理获取得到的信息并输出count结果
data=content(r, "parsed", "application/json")
esearchresult=data$esearchresult
count = esearchresult$count
print(count)


#任务2
#获得title和abstract
#这里使用了上面搜索返回的querkey,webnv,可以加快速度。下面的POST中可以不加上这参数

install.packages("xml2")
library(xml2)
#模块一:搜索所需信息
searchArticleParam$total_num=esearchresult$count
searchArticleParam$querykey=esearchresult$querykey
searchArticleParam$webenv=esearchresult$webenv

#模块二:将请求的各项数据整理为表格
pubmedidStr="29275861,29275860"; #多个pubmedid之间用“,”连接
postFetchUrl=paste(baseUrl,pubmedAction$fetch,sep="")
r2 <- POST(postFetchUrl, 
           body = list(
             db='pubmed',
             id=pubmedidStr,
             retmode='xml', #返回xml格式的,这个接口不支持json格式
             usehistory=searchArticleParam$usehistory,
             querykey=searchArticleParam$querykey,
             webenv=searchArticleParam$webenv)
)
stop_for_status(r2)

#模块三:整理信息并输出结果
data2=content(r2, "parsed", "application/xml")
article=xml_children(data2)#xml_length(article)为里面文章的数量
count=length(article)
cnt=1
while(cnt<=count){ #循环将title和abstract输出
  title=xml_find_first(article[cnt],".//ArticleTitle") #找到第一个ArticleTitle节点
  abstract=xml_find_first(article[cnt],".//AbstractText")
  print(xml_text(title))
  print(xml_text(abstract))
  cnt = cnt + 1
}

实在无从下手,同样用的R2-02的代码,只是用刚学到的模块化思维分了下类

 
邀请讨论

附件

{{f.title}} 大小 {{f.file_size}} 下载 {{f.count_download}} 金币 {{f.count_gold}}
{{item.nick_name}} 受邀请回答 {{item.create_time}}
{{item.refer_comment.nick_name}} {{item.refer_comment.create_time}}

附件

{{f.title}} 大小 {{f.file_size}} 下载 {{f.count_download}} 金币 {{f.count_gold}}
切换到完整回复 发送回复
赞({{item.count_zan}}) 踩({{item.count_cai}}) 删除 回复 关闭
科研狗©2015-2024 科研好助手,京ICP备20005780号-1 建议意见

服务热线

178 0020 3020

微信服务号