Я пытаюсь проанализировать https://api.lever.co/v0/postings/matchgroup?mode=xml, но получаю ошибку lxml.etree.XMLSyntaxError: CData section not finished
. Похоже, проблема вызвана данными, содержащими корейские символы.
import lxml.etree
import io
import requests
url = "https://api.lever.co/v0/postings/matchgroup?mode=xml"
r = requests.get(url)
f = io.BytesIO(r.content)
parser = lxml.etree.XMLParser(recover=False)
tree = lxml.etree.parse(f,parser) # Raises lxml.etree.XMLSyntaxError
Я могу изменить восстановление на True
, но тогда некоторые записи будут отсутствовать.
Существуют XML-файлы, которые я могу проанализировать с помощью lxml в Python, но анализаторы Chrome и Firefox не могут проанализировать.
В этом случае файл поврежден из-за непечатаемого символа x08
(^H
).
Исправить это:
f = io.BytesIO(r.content.replace(b"\x08", b""))
Не лучше ли заменить его на \b ? См. stackoverflow.com/a/22961219/20851944
@ Hermann12 Непечатаемые символы не допускаются в xml. \b изменит только свое представление.
Если я выдаю print('\x08') в своем Jupyter, он напечатает небольшой квадратик, "что в Корее, возможно, может быть действительным знаком". Но я не эксперт.
Этот документ помечен как неправильно сформированный даже браузером, поэтому по какой бы то ни было причине он поврежден. Скорее всего, это проблема структуры, а не международных символов.