自动化提取不会返回xml文件

时间:2019-03-30 21:59:23

标签: python-3.x beautifulsoup pubmed

关键字: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文件,但是如果我要通过将id替换为变量(temp_id)来自动进行搜索,返回文本,而不是xml文件。

因此我收到此错误(因为没有带xml标记的xml文件)

回溯(最近通话最近):   在第14行的文件“ test.py”中     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。

我想获得一些帮助,因为我怀疑自己的网址构造不正确。

1 个答案:

答案 0 :(得分:0)

原来,这是Beautiful Soup处理url链接的方式中的一个问题。我改为使用ElementTree,并且有效。