请求 returns 200 但 ElementTree 无法解析空根
Requests returns 200 but ElementTree fails to parse empty root
这是 link 到 API 的 API,它的 ID 由另一个 API 提供,它应该可以工作,但目前没有,因为他们没有为它编制索引。问题是 link returns 200 和 xml 的空根。
我是 Python 的新手,但基本上问题是 ID return 是一个空的 XML 根,响应是 200,我可以看到它 return 一些东西但是空的,Elementtree 给我错误:
与 response.text:
try:
xml = r.text
if xml:
root = ElementTree.parse(xml)
except ElementTree.ParseError:
有错误:
FileNotFoundError:[Errno 2] 没有这样的文件或目录:'\n\n\n'
并且还尝试了字节:
try:
xml = r.content
if xml:
root = ElementTree.fromstring(xml)
except ElementTree.ParseError:
有错误:
TypeError: Parser 必须是字符串或字符流,不能是 NoneType
我似乎无法触发捕获,因为它总是 200。如何在解析之前检查 xml 的 validity/existence?
我有数以千计的文档要解析,这个错误让一切都崩溃了。
尝试这样的事情:
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...
这是 link 到 API 的 API,它的 ID 由另一个 API 提供,它应该可以工作,但目前没有,因为他们没有为它编制索引。问题是 link returns 200 和 xml 的空根。
我是 Python 的新手,但基本上问题是 ID return 是一个空的 XML 根,响应是 200,我可以看到它 return 一些东西但是空的,Elementtree 给我错误:
与 response.text:
try:
xml = r.text
if xml:
root = ElementTree.parse(xml)
except ElementTree.ParseError:
有错误: FileNotFoundError:[Errno 2] 没有这样的文件或目录:'\n\n\n'
并且还尝试了字节:
try:
xml = r.content
if xml:
root = ElementTree.fromstring(xml)
except ElementTree.ParseError:
有错误: TypeError: Parser 必须是字符串或字符流,不能是 NoneType
我似乎无法触发捕获,因为它总是 200。如何在解析之前检查 xml 的 validity/existence?
我有数以千计的文档要解析,这个错误让一切都崩溃了。
尝试这样的事情:
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...