Запрос возвращает 200, но ElementTree не может разобрать пустой root - PullRequest
0 голосов
/ 20 апреля 2020

Вот ссылка на API с идентификатором, предоставленным другим API, он должен работать, но в настоящее время это не так, потому что они не проиндексировали его. Проблема в том, что ссылка возвращает 200 и пустое root из xml.

xml ссылка

Я новичок - я sh до Python, но в основном проблема в том, что ID возвращает пустое XML root, ответ равен 200, и я вижу, что он возвращает что-то, но пустое, и 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 перед анализом?

У меня есть тысячи документов для анализа, и эта ошибка ломает все это.

1 Ответ

0 голосов
/ 20 апреля 2020

Попробуйте что-то вроде этого:

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...
...