|
0 / 0 / 0
Регистрация: 09.07.2016
Сообщений: 3
|
||||||
ElementTree и FB2: ParseError в файлах cp125123.11.2017, 17:34. Показов 4763. Ответов 4
Занялся я тут на досуге парсингом fb2-книг. Использую Python 3x, компонент xml.etree.ElementTree.
Случилась у меня засада. Если файл в кодировке ANSI, то постоянно появляется ошибка ParseError. Исследование показало, что по указанным координатам в файлах находятся &-последовательности (вроде   или символ с кодом 7. Можно ли что-то с этим сделать? Очень уж не хочется заниматься еще и разного рода перекодировками файлов... Ну вот, чтобы не быть голословным, функция, которая извлекает нужные данные из файла:
0
|
||||||
| 23.11.2017, 17:34 | |
|
Ответы с готовыми решениями:
4
Как создать конвертер (fb2->txt,txt->fb2) Phonegap не отправляет Ajax. Parseerror ElementTree & Unicode |
|
|
|||||||
| 24.11.2017, 20:28 | |||||||
|
Поскольку заранее она вам может быть неизвестна (не UTF8) - используйте модуль chardet, для детектирования кодировки файла. Хотя, можно, конечно и вручную - открыв файл в бинарном режиме попробовать прочитать по высчитанному смещению его кодировку в шапке файла:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 09.07.2016
Сообщений: 3
|
||||||
| 24.11.2017, 20:56 [ТС] | ||||||
|
Благодарю за ответ. Напомню:
0
|
||||||
|
|
|||
| 25.11.2017, 00:18 | |||
|
А то ----------------------------------- Невалидный ваш xml - и как xml его разбирать не получается. Читалки, конечно, прочитают - они же умные и не такое вычитывают. А парсер xml так задуман - падать на любой ошибке, в отличие от парсера html. Можно пробовать удалять из текста символы на которых парсер xml падает и только потом парсить. У меня получилось вашу книжку распарсить через import lxml.html as etreeИ то только предварительно удалив xml декларацию с кодировкой - о чем сразу сказал парсер lxml.html Ничего лучше пока в голову не приходит. ----------------------------- Если файл изначально открывать в бинарном режиме - то lxml.html его разбирает на ура - даже xml декларацию удалять не нужно. Причем разбирает самостоятельно декодируя байты (в UTF8?). ---------------------------------------------------- Вариант с удалением амперсанда (&) тоже работает. Амперсанд это практически единственный символ, который вам потребуется заменять в xml, если он находится внутри текстового узла. Еще, само собой, внутри текстовых узлов xml недопустим символы < и >, но поскольку весь XML только и состоит из них - заниматься их отловом проблематично.
0
|
|||
|
0 / 0 / 0
Регистрация: 09.07.2016
Сообщений: 3
|
|
| 25.11.2017, 14:14 [ТС] | |
|
Так я же написал в тексте первого своего поста, что cp1251 и ParseError... Тотального исследования, конечно, не проводил, но сложилось стойкое впечатление, что на файлах в UTF-8 таких падений нет... Там другое случается, а именно AtributeError, но эту ошибку еще не исследовал. сложилось ощущение, что извлекается не узел, а что-то другое. Ну да это ладно.
Все же мне кажется, что в рассматриваемом файле это не ошибка XML как такового, а загоны парсера с кириллическими кодировками. Уже сталкивался с тем, что многие стандартные компоненты с кириллицей как-то не очень... Кстати, коли уж пошла речь о моей функции... Нет ли возможности запакованный файл скормить ElementTree, не распаковывая файл на диск? А не так, как я - байтовую строку функции fromstring()?.. Благодарю.
0
|
|
| 25.11.2017, 14:14 | |
|
Помогаю со студенческими работами здесь
5
Кодировка xml.etree.ElementTree Lxml назначение etree.ElementTree Создание XML через ElementTree Работа с модулем xml.etree.ElementTree Не работает tostring в xml.etree.ElementTree Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|