Чтение двоичных данных XML с помощью BeautifulSoup

#xml #beautifulsoup #raw-data

#xml #beautifulsoup #необработанные данные

Вопрос:

Добрый день,

Я использую BeautifulSoup для анализа XML-файла, который имеет тег, подобный приведенному ниже образцу, который содержит некоторые двоичные данные:

 <data length=1234 encoding="x-modified">
:MANEG9amp;3I6%1I8CN!68<ID(E]*%N]Y/J;:6EYM6amp;N:9<E9).YA*I:94*]9O.[Y
R;59Z0LEWY;74*:E!5YWM8KE[AE;48:5N"I74*:H(E#L79X57ZG1'E:85=YVE68,
:3=5=:Bamp;FVN-Y(EU;UJ:*28FSQ#F6,ID'V:EE-JVN=APE:9Xamp;8EYFL<67TI$DBR0
........
</data>
 

Тег, атрибуты и двоичные данные считываются неправильно, как показано ниже:

 <data>1234 encoding="x-modified"amp;>
:MANEG93I6%1I8CN!68<ID>(E]*%N]Y/J;:6EYM6<E9>).YA*I:94*]9O.[Y
R;59Z0LEWY;74*:E!5YWM8KE[AE;48:5N"I74*:H(E#L79X57ZG1'E:85=YVE68,
:3=5=:B(EU;UJ:*28FSQ#F6,ID'V:EE-JVN=APE:9X8EYFL</E9></ID></data>
 

Обратите внимание, как усекаются данные, когда в данных встречается символ «<«. Также обратите внимание, что атрибут ‘length’ удаляется при чтении тега.

Любые идеи, как я могу обойти это, приветствуются.

Спасибо.

Ответ №1:

Вы описываете это как XML-файл, но это не так.

Данные представляют собой полный беспорядок (в XML «<» не допускается в текстовых узлах без экранирования), и хотя BeautifulSoup делает все возможное, чтобы создать порядок из хаоса, это не волшебство, и в этом примере он явно терпит неудачу.

Моя рекомендация состояла бы в том, чтобы использовать такие стандарты, как XML или JSON для передачи данных, вместо нечетких приближений без формального определения. Вы не сможете надежно анализировать файлы данных, если у вас нет спецификации формата.