Нужно читать 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
лучше, если вы можете найти способ управлять ошибками.