服务热线
178 0020 3020
#任务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的代码,只是用刚学到的模块化思维分了下类
附件