自动化 efetch 不会 return 一个 xml 文件

Automating efetch does not return an xml file

关键词:Entrez NCBI PubMed Python3.7 BeautifulSoup xml

我想从 Pubmed ID 列表中检索一些 xml 数据。 当我使用 Entrez 网站 (https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=10890170&retmode=xml) 上作为示例提供的 url 时,数据被正确下载为 xml 文件,但是如果我要通过替换带有变量 (temp_id) 的 id,返回文本而不是 xml 文件。

因此出现此错误(因为没有 xml 带有 xml 标签的文件)

回溯(最后一次调用): 文件 "test.py",第 14 行,位于 pub_doi = soup.find(idtype="doi").text AttributeError: 'NoneType' 对象没有属性 'text'

from bs4 import BeautifulSoup
import certifi
import urllib3
temp_id=str(10890170)
#efetch_url = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=10890170&retmode=xml'#this url works

base_url = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/'
efetch_url = '%sefetch.fcgi?db=pubmed&id=%s&retmode=xml' % (base_url, temp_id)
try:
    http = urllib3.PoolManager()
    http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
    url = efetch_url
    results = http.request('GET', url)
    soup = BeautifulSoup(results.data,features='xml')
    pub_doi = soup.find(idtype="doi").text
    pub_abstract = soup.pubmedarticleset.pubmedarticle.article.abstract.abstracttext.text
except (urllib3.exceptions.HTTPError, IOError) as e:
    print("ERROR!", e)
else:
    pass

出于某种原因,当我在浏览器中复制并粘贴 url 时,它在 Safari 中显示为文本,而在 chrome 中显示为 xml。

我想得到一些帮助,因为我怀疑我的 url 构造得不好。

事实证明这是 Beautiful Soup 处理 url link 的方式的问题。我改用了 ElementTree,它起作用了。