R语言网络爬虫之Pubmed API的使用

2019-07-31 14:49:22 浏览数 (1)

查询文献你懂的,我认为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的文档中。

使用中注意的问题:

  1. 如果出现以下几面,重新运行,library(‘RCurl’)
  1. 查看我们是否获取了Pubmed ID 的列表,如图
  1. 查看我们获取的所有的文献的摘要:

至此,我们可以获取一种基因相关的文献。当然,我们不可能只是为了检索这么一个基因,当检索100,1000,甚至10000的时候,你懂的,加个FOR循环,只要你的网不断,那么你获取的将会不会打折扣。

参考文档:

  1. https://www.ncbi.nlm.nih.gov/books/NBK25501/
  2. https://www.ncbi.nlm.nih.gov/nlmcatalog/?term=oncotarget

0 人点赞