Получение не ascii символов как ответ от python urllib - PullRequest
0 голосов
/ 02 июля 2018
import urllib
from urllib.request import urlopen
import xml.etree.ElementTree as etree
response = urllib.request.urlopen("http://regnskaber.virk.dk/32673592/eGJybHN0b3JlOi8vWC1GNzY5MUY0Ny0yMDE0MDMyOV8xMzQxNThfMTc5L3hicmw.xml")

print (response.getcode())

print (response.readline()) # it gets the first line if you need to the check the output

Пожалуйста, помогите, как решить эту проблему кодирования. Мне нужно разобрать содержимое XML.

1 Ответ

0 голосов
/ 02 июля 2018

Магические байты 0x1f8b в начале ответа указывают на сжатие zlib. Серверы часто сжимают данные для транспорта, а браузеры автоматически распаковывают их. Здесь вам придется сделать второй шаг самостоятельно:

import urllib
from urllib.request import urlopen
import xml.etree.ElementTree as ET
from io import BytesIO
import gzip
response = urllib.request.urlopen("http://regnskaber.virk.dk/32673592/eGJybHN0b3JlOi8vWC1GNzY5MUY0Ny0yMDE0MDMyOV8xMzQxNThfMT\
c5L3hicmw.xml")
print (response.getcode())

data = response.read()

compdata = BytesIO(data)
text = []
for unit in gzip.GzipFile(fileobj=compdata):
    text.append(unit)
text = b"".join(text)

tree = ET.fromstring(text)
print(tree)

Выход:

200
<Element '{http://www.xbrl.org/2003/instance}xbrl' at 0x104d09098>
...