Самый простой способ проанализировать XML в Python — использовать библиотеку ElementTree. Рассмотрим небольшую программу, которая анализирует файл menu.xml и выводит на экран некоторые теги и атрибуты:
>>>> import xml.etree.ElementTree as et
>>>> tree = et.ElementTree(file='menu.xml')
>>>> root = tree.getroot()
>>>> root.tag
>'menu'
>>>> for child in root:
>…·····print('tag:', child.tag, 'attributes:', child.attrib)
>·····for grandchild in child:
>…·········print('\ttag:', grandchild.tag, 'attributes:', grandchild.attrib)
>…
>tag: breakfast attributes: {'hours': '7-11'}
>····tag: item attributes: {'price': '$6.00'}
>····tag: item attributes: {'price': '$4.00'}
>tag: lunch attributes: {'hours': '11-3'}
>····tag: item attributes: {'price': '$5.00'}
>tag: dinner attributes: {'hours': '3-10'}
>····tag: item attributes: {'price': '8.00'}
>>>> len(root)·····# количество разделов menu
>3
>>>> len(root[0])··# количество элементов breakfast
>2
Для каждого элемента вложенных списков tag — это строка тега, а attrib — это словарь его атрибутов. Библиотека ElementTree имеет множество других способов поиска данных, организованных в формате XML, модификации этих данных и даже записи XML-файлов. Все детали изложены в документации библиотеки ElementTree (http://bit.ly/elementtree).
Среди других библиотек для работы с XML в Python можно отметить следующие:
• xml.dom. The Document Object Model (DOM), знакомая разработчикам на JavaScript, представляет веб-документы как иерархические структуры. Этот модуль загружает XML-файл в память целиком и позволяет вам получать доступ ко всем его частям;
• xml.sax. Simple API for XML, или SAX, разбирает XML на ходу, поэтому он не загружает в память сразу весь документ. Он может стать хорошим выбором, если вам нужно обработать очень большие потоки XML.
Огромные объемы данных сохраняются в формате гипертекстового языка разметки (Hypertext Markup Language, HTML), это основной формат документов в сети Интернет. Проблема заключается в том, что значительная часть этих документов не соответствует правилам формата HTML, поэтому его трудно разобрать. Помимо этого, большая часть HTML предназначена для того, чтобы форматировать выводимую информацию, а не обмениваться данными. Поскольку эта глава предназначена для того, чтобы описать относительно хорошо определенные форматы данных, я вынес рассмотрение HTML в главу 9.