首先,在批量下载文件之前,我强烈建议您阅读电子公用事业使用指南 https://www.ncbi.nlm.nih.gov/books/NBK25497/#_chapter2_Usage_Guidelines_and_Requiremen_.
如果您想要全文文章,您将需要将搜索限制为打开访问文件。此外,如果您想要任何好的文章,我建议您也将搜索限制在 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网站 https://www.ncbi.nlm.nih.gov/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"])
- 您可能想通过更改来批量下载
retstart
and retmax
通过循环中的变量以避免服务器泛滥。
- If
handle
仅包含一个文件,handle.read()
包含整个 XML 文件作为字符串。如果包含更多,则文章包含在<article></article>
nodes.
- 全文仅以 XML 形式提供,并且 pubmed 中可用的默认解析器不处理 XML 命名空间,因此您将需要自己使用元素树 https://docs.python.org/3/library/xml.etree.elementtree.html(或其他解析器)来解析您的 XML。
- 在这里,通过电子实用程序的内部历史记录可以找到这些文章,可以通过
webenv
参数并启用感谢usehistory="y"
论证中Entrez.read()
有关使用 ElementTree 进行 XML 解析的一些提示: 您无法删除孙节点,因此您可能需要递归删除一些节点。node.text
返回文本node
,但仅限于第一个孩子,因此您需要按照以下方式做一些事情"".join(node.itertext())
如果你想获取给定节点中的所有文本。