Нужно читать XML-файлы как поток, используя BeautifulSoup в Python

У меня дилемма.

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

Можно ли использовать Beautiful Soup для чтения данных в виде потока вместо целого файла в память?

Я пытался использовать ElementTree, но не могу, потому что он задыхается от любого искаженного XML.

Если Python не лучший язык для этого проекта, пожалуйста, добавьте свои рекомендации.

1 ответ

Решение

У Beautiful Soup нет потокового API, о котором я знаю. У вас есть, однако, альтернативы.

Классический подход для анализа больших потоков XML - использование анализатора событий, а именно SAX. В питоне xml.sax.xmlreader, Он не захлебнется от искаженного XML. Вы можете избежать ошибочных частей файла и извлечь информацию из остальных.

SAX, однако, является низкоуровневым и немного грубым по краям. В контексте Python это ужасно.

xml.etree.cElementTree реализация, с другой стороны, имеет гораздо более приятный интерфейс, довольно быстрая и может обрабатывать потоки через iterparse() метод.

ElementTree лучше, если вы можете найти способ управлять ошибками.

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