下载PMC和PubMed数据库中的所有全文文章

时间:2017-11-14 19:01:52

标签: api download ncbi pubmed

根据NCBI帮助台的一个回答问题,我们无法批量下载" PubMed Central 。但是,我可以使用" NCBI E-utilities"使用 Efetch 在PMC数据库中下载所有全文,或者至少使用Entrez Programming Utilities中的 Esearch 查找所有相应的PMC?如果是,那怎么样?如果无法使用电子实用程序,还有其他方法可以下载所有全文文章吗?

2 个答案:

答案 0 :(得分:2)

首先,在您批量下载文件之前,我强烈建议您阅读E-utilities usage guidelines

如果您想要全文文章,那么您可能希望将搜索限制为打开访问文件。此外,如果您想要任何好的文章,我建议您将搜索限制在Medline文章中。然后你可以进行搜索。

使用Biopython,这给了我们:

search_query = 'medline[sb] AND "open access"[filter]'

# getting search results for the query
search_results = Entrez.read(Entrez.esearch(db="pmc", term=search_query, retmax=10, usehistory="y"))

您可以使用PMC website上的搜索功能,它会显示您可以复制/粘贴到代码中的生成查询。 现在您已完成搜索,您可以实际下载文件:

handle = Entrez.efetch(db="pmc", rettype="full", retmode="xml", retstart=0, retmax=int(search_results["Count"]), webenv=search_results["WebEnv"], query_key=search_results["QueryKey"])
  • 您可能希望通过循环中的变量更改retstartretmax来批量下载,以避免充斥服务器。
  • 如果handle只包含一个文件,handle.read()将整个XML文件包含为字符串。如果它包含更多,则文章包含在<article></article>节点中。
  • 全文仅以XML格式提供,pubmed中提供的默认解析器不会处理XML命名空间,因此您可以使用ElementTree(或其他方式)自行处理解析器)来解析你的XML。
  • 在这里,由于电子实用程序的内部历史记录,可以找到这些文章,可以使用webenv参数访问这些文章并通过usehistory="y" Entrez.read()参数启用>

有关使用ElementTree进行XML解析的一些提示:您无法删除孙子节点,因此您可能希望以递归方式删除某些节点。 node.text会返回node中的文字,但只返回第一个孩子,因此如果您想获取所有文字,则需要按照"".join(node.itertext())的标准执行某些操作在给定的节点中。

答案 1 :(得分:0)

根据NCBI帮助台回答的问题之一,我们无法“批量下载” PubMed Central。

https://www.nlm.nih.gov/bsd/medline.html + https://www.ncbi.nlm.nih.gov/pmc/tools/openftlist/将下载其中的很大一部分(我不知道百分比)。确实会错过https://www.ncbi.nlm.nih.gov/pmc/tools/openftlist/中所述的PMC全文文章,这些文章的许可不允许重新分发。