查询文献你懂的,我认为Pubmed首选。当oncotarget杂志不再被Pubmed检索的收获,多少博士内心发慌,多少专家内心悔恨自己掏出的稿费。当然,用好Pubmed不能仅限于利用网页界面去检索那么几个关键词,AND 或者 OR。今天我来给大家介绍一下Pubmed API是如何在R语言中运用自如的。
1. 我们需要安装R语言实现网络爬虫的两个关键包: XML,RCurl。
安装R包大家都熟悉了:
install.packages('XML');
install.packages('RCurl');
或者你如果觉得写代码麻烦,你也可以通过R语言菜单实现:
2. R包安装成功后,在进行网络爬虫时需要加载这两个包:XML,RCurl。
R代码:
library(XML)
library(RCurl)
完成R包的加载。
3. 查看Pubmed API的解释文档,当然这都是英文的了。从中我们知道通过如下的链接和参数可以获取对应的文章ID以及摘要信息。
a. https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi 用来获取Pubmed ID
传递的参数包括:
db-数据库的名称,我们当然是pubmed;
term-检索的关键词,其检索的条件用AND 或者OR进行隔开对应的关键词。当然,关键词也可选择其所在的领域,我们今天的实例是以基因为例。需要在关键词后面加 [gene];
usehistory-即是否记录为检索历史,参数包括y (记录),n(不记录);
RetMax-每一页所要列举的ID的数量;
RetStart-所要展示的当前的页面。
b. https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi 用来获取Pubmed 文献的摘要信息。
传递的参数包括:
Query_key-获取a中的传递的键值,必须与WebEnv联合使用否则无法获取文献的摘要列表。
WebEnv-即从a中传递过来的网页事件ID,webenv标签中的值,用以告诉网页我们所要查询的是那些关键字的文献。
rettype- 我们获取的列表的类型,我们以获取摘要为主,参数值也就是abstract。当然,你也可以按自己的需求去改。
retmode-获取当前文献列表的内容的形式,这个一般都是以文本形式记录所获取的内容,参数值为text。
4. R语言调用Pubmed API代码实例(获取基因SI和cancer相关的文献):
path='https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi'
web=getForm(path,db='pubmed',term='SI[gene] AND cancer',usehistory='y',RetMax='10',RetStart='1')
doc<-xmlParse(web,asText=T,encoding="UTF-8")
webenv<-sapply(getNodeSet(doc,"//WebEnv"),xmlValue)
key<-sapply(getNodeSet(doc,"//QueryKey"),xmlValue)
path1='https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi'
res=getForm(path1,Query_key=key,db='pubmed',WebEnv=webenv,rettype='abstract',retmode='text')
write.table(res,'D:/examle.txt',col.names=F)
以上代码运行结果就是将获取的文献摘要存在example.txt的文档中。
使用中注意的问题:
- 如果出现以下几面,重新运行,library(‘RCurl’)
- 查看我们是否获取了Pubmed ID 的列表,如图
- 查看我们获取的所有的文献的摘要:
至此,我们可以获取一种基因相关的文献。当然,我们不可能只是为了检索这么一个基因,当检索100,1000,甚至10000的时候,你懂的,加个FOR循环,只要你的网不断,那么你获取的将会不会打折扣。
参考文档:
- https://www.ncbi.nlm.nih.gov/books/NBK25501/
- https://www.ncbi.nlm.nih.gov/nlmcatalog/?term=oncotarget