根据NCBI服务台回答的问题之一,我们不能“批量下载”PubMed Central。但是,我是否可以使用"NCBI -实用程序“下载PMC数据库中的所有全文文章,使用Efetch,或者至少在Entrez编程实用程序中使用搜索找到所有相应的PMCids?如果是,那怎么做?如果不能使用E-实用程序,是否有其他方法下载所有全文文章?
发布于 2018-03-27 14:05:09
首先,在批量下载文件之前,我强烈建议您阅读E-实用程序使用指南。
如果您想要全文文章,您将需要限制您的搜索打开访问文件。此外,我还建议,如果你想要任何好的文章,我也建议你的搜索仅限于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网站上使用搜索函数,它将显示生成的查询,您可以将其复制/粘贴到代码中。现在您已经完成了搜索,您可以实际下载以下文件:
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
和retmax
来批量下载,以避免淹没服务器。handle
只包含一个文件,则handle.read()
作为字符串包含整个XML文件。如果包含更多内容,则文章包含在<article></article>
节点中。webenv
参数访问,并通过Entrez.read()
中的usehistory="y"
参数启用。关于使用ElementTree进行XML解析的一些技巧:您不能删除一个外孙节点,所以您可能希望递归地删除一些节点。node.text
返回node
中的文本,但只返回到第一个子节点,因此,如果要在给定节点中获取所有文本,则需要按照"".join(node.itertext())
的方式进行操作。
发布于 2020-09-13 05:11:07
根据NCBI服务台回答的问题之一,我们不能“批量下载”PubMed Central。
https://www.nlm.nih.gov/bsd/medline.html + https://www.ncbi.nlm.nih.gov/pmc/tools/openftlist/将下载其中的很大一部分(我不知道百分比)。它确实会错过PMC的全文文章,其许可不允许重新分配,正如在https://www.ncbi.nlm.nih.gov/pmc/tools/openftlist/上解释的那样。
https://stackoverflow.com/questions/47293387
复制相似问题