Python3: декодирование ответа «application/x-gzip» с запросами

Я использую запросы для загрузки данных с веб-сайта. Содержимое представляет собой XML-файл EPG, упакованный в сжатый файл gz. Я гуглил и пробовал всю ночь, но безуспешно.

Это соответствующий фрагмент моего текущего этапа. Я пытался изменить кодировку на UTF-8 и ISO-8859-1, но это просто дает мне другую ерунду.

import xml.etree.ElementTree as ET
import requests
import gzip

url = 'http://example.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
    'AppleWebKit/537.36 (KHTML, like Gecko) '
    'Chrome/102.0.0.0 Safari/537.36'
}


def import_xml() -> list:
    try:
        response = requests.get(url, headers=headers, stream=True)
        print(response)
        print(response.headers['Content-Type'])
        print(response.encoding)
        print(response.text[:100])
        print(response.content[:100])

data = import_xml

Это выводит следующее:

<Response [200]>
application/x-gzip
None
      ��v�J�-�~�8��^��%�u�vuI�/�����z*��HX ���o�?��t����;s��I� ,[�K{��e�@�̌��1#�����4   
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x0b\xec\xbd\xdbv\xdbJ\x92-\xfa~\xc68\xff\x80^\x0f\xed\xee\xb1%\x97u\xf1\xbavu\x0fI\xbe/\xcb\xf6\xb6\xb4\xec\xaaz*\x90\x84HX \xc0\x02\x08\xc9\xf4o\xec?\xd8\xfdt\x1e\xce\xf9\x88\xae\x1f;s\xce\xc8\x04I\x98\x00\x05,[\x1e\xbbK{\x8f\xaee\x9b@\x02\x88\xcc\x8c\x8c\x981#\xe2\xdf'

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обычно сжатый контент подается как application/gzip. Похоже, запросы не знают, что делать с application/x-gzip, поэтому вам придется расшифровывать его вручную.

import gzip

result = gzip.decompress(response.content)

Спасибо, это было так просто :) У меня действительно была эта строка в моем коде, просто закомментированная. Я предполагаю, что что-то еще было не так, когда я пробовал это. В любом случае, теперь все выглядит хорошо, еще раз спасибо.

hulkhaugen 25.11.2022 07:45

Другие вопросы по теме