请求返回200,但ElementTree无法解析空根

时间:2020-04-20 19:28:16

标签: python xml python-requests elementtree

这是指向具有其他API提供的ID的API的链接,它应该可以工作,但目前不起作用,因为他们没有为它建立索引。问题是链接返回200和xml的空根。

xml link

我是Python的新手,但是基本上问题是ID返回一个空的XML根,响应为200,我可以看到它确实返回了一些东西,但为空,而Elementtree给了我错误:

带有response.text:

try:
    xml = r.text
    if xml:
        root = ElementTree.parse(xml)
except ElementTree.ParseError:

,出现错误: FileNotFoundError:[错误2]没有这样的文件或目录:'\ n \ n \ n'

并尝试作为字节:

try:
    xml = r.content
    if xml:
        root = ElementTree.fromstring(xml)
except ElementTree.ParseError:

,出现错误: TypeError:解析器必须是字符串或字符流,而不是NoneType

我似乎无法触发捕获,因为它总是200。在解析之前如何检查xml的有效性/存在性?

我有成千上万的文档要解析,并且此错误将其全部破坏。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=32277197&rettype=abstract"
import requests

from lxml import etree
resp = requests.get(url)

doc = etree.XML(resp.content)

floor = doc.xpath('count(//*)')
if floor < 3: #or whatever
     print("I'm outta here...")

编辑: 或使用XML:

import xml.etree.ElementTree as ET
doc = ET.fromstring(resp.text)
floor = doc.findall(".//")
if len(floor) < 3:
    print("I'm outta here...")

输出:

I'm outta here...