Мне нужно автоматизировать сбор статей PubMed. Я нашел только примеры загрузки статей PubMed по запросу термина и загрузки статьи PubMed по пмид. (ОДНА СТАТЬЯ) Но я думаю о том, чтобы загрузить СПИСОК идентификаторов PubMed по дате (от-до) или все их, как в OAI.
Скачать список всех опубликованных идентификаторов по дате (от-до)
comment
Ваша проблема решена или еще не решена?
- person Maximilian Peters   schedule 01.07.2016
Ответы (1)
Для таких целей вы можете использовать BioPython. Следующий фрагмент кода даст вам ссылку на все статьи PubMed за определенный диапазон дат. Статьи PMC можно загружать напрямую, для других статей предоставляется DOI, но расположение PDF зависит от издателя и не может быть предсказано для всех статей.
def article_links(start_date, end_date = '3000'):
"""
start_date, end_date = 'YYYY/MM/DD'
returns a list of PubMedCentral links and a 2nd list of DOI links
"""
from Bio import Entrez
Entrez.email = "[email protected]"
#get all articles in certain date range, in this case 5 articles which will be published in the future
handle = Entrez.esearch(db="pubmed", term='("%s"[Date - Publication] : "%s"[Date - Publication]) ' %(start_date, end_date))
records = Entrez.read(handle)
#get a list of Pubmed IDs for all articles
idlist = ','.join(records['IdList'])
handle = Entrez.efetch("pubmed", id=idlist, retmode="xml")
records = Entrez.parse(handle)
pmc_articles = []
doi = []
for record in records:
#get all PMC articles
if record.get('MedlineCitation'):
if record['MedlineCitation'].get('OtherID'):
for other_id in record['MedlineCitation']['OtherID']:
if other_id.title().startswith('Pmc'):
pmc_articles.append('http://www.ncbi.nlm.nih.gov/pmc/articles/%s/pdf/' % (other_id.title().upper()))
#get all DOIs
if record.get('PubmedData'):
if record['PubmedData'].get('ArticleIdList'):
for other_id in record['PubmedData']['ArticleIdList']:
if 'doi' in other_id.attributes.values():
doi.append('http://dx.doi.org/' + other_id.title())
return pmc_articles, doi
if __name__ == '__main__':
print (article_links('2016/12/20'))
person
Maximilian Peters
schedule
16.06.2016