使用python从pubmed下载文献
最近用来看文章的网站researcher-app要关了,被逼无奈只能自己写个脚本下载文献。
researcher-app作为一个网页和app都能登陆的文献订阅工具陪伴了我许多年,每天上午冲杯咖啡刷文献已经是我每天的例行操作,不过最近网站突然关闭了,导致这段时间喝咖啡都没感觉了。本来想看看有没有其他的替代方案,总是不太满意,要么界面不习惯要么就是乱七八糟的广告太多;去杂志的官网订阅了一段时间后发现短短一周几千篇未读邮件根本没有心情点进去。
没办法只能自己解决了,第一个想到的就是python去每个网站爬文章,但是发现不同的网站结构不一样,很难用一套代码爬取所有的网站,最后想起biopython里面好像有pubmed的工具。耐着性子把biopython的说明书看了一下,然后就自己写了一套脚本。可以将自己感兴趣的杂志的最新的文章下载下来,并把文章题目、摘要、发表时间、杂志名称和PMID导出到表格。
import pandas as pd
from Bio import Medline
from Bio import Entrez
articles = []
for jour in open('jours'):
Entrez.api_key = "MyAPIkey" #从pubmed申请
Entrez.email = "123@456.com" #自己的邮箱地址
stream = Entrez.esearch(db="pubmed", term=f"{jour}[jour]", retmax="2") #从杂志列表下载文献,这里只下载两篇试试
record = Entrez.read(stream)
data_base = record["IdList"]
articles.extend(data_base)
article_summary = [] #所有文献的列表
for article in articles:
print(f'正在下载{article}。')
search_results =Entrez.efetch(db="pubmed", id=article, rettype="medline", retmode="text")
article_info = Medline.read(search_results)
title = article_info["TI"]
try:
abstract = article_info["AB"]
except:
abstract = '文章无摘要'
journal = article_info["TA"]
pub_time = article_info["EDAT"]
article_summary.append(
{'Title': title, 'Abstract': abstract, 'Time': pub_time, 'Journal': journal,
'PMID': article})
df = pd.DataFrame(article_summary)
df.to_csv('article_summary.csv', index=False) #导出表格
#by平头哥,随意复制,引用请说明来处。
代码中每中杂志只下载两篇文献,作为调试,这里我挑了Mabs和Blood两个杂志搜索,结果如下。
看着还行哈,然后把常用的一些杂志名称加进去就能搜索这些杂志最新的文献了。虽然没有之前刷文献的快感,但至少后面的习惯不需要建立在别人做的工具上,一直受制于人了。