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

s.2*_*330 6 api download ncbi pubmed

根据 NCBI 帮助台回答的问题之一,我们不能“批量下载” PubMed Central。但是,我可以使用“NCBI E-utilities”使用Efetch下载PMC 数据库中的所有全文论文,或者至少使用Entrez Programming Utilities 中的Esearch找到所有相应的 PMCid吗?如果是,那么如何?如果无法使用E-utilities,有没有其他方法可以下载所有全文文章?

Syn*_*sus 2

首先,在批量下载文件之前,我强烈建议您阅读电子实用程序使用指南

如果您想要全文文章,您将需要将搜索限制为打开访问文件。此外,如果您想要任何好的文章,我建议您也将搜索限制在 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"))
Run Code Online (Sandbox Code Playgroud)

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

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"])
Run Code Online (Sandbox Code Playgroud)
  • 您可能希望通过更改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())