Библиотека json (https://docs.python.org/3/library/json.html) может анализировать JSON, расположенный в строках или файлах, и помещать его в словарь Python (или список, если это вам так удобнее). Она также преобразует словари или списки Python в строки JSON. Например, в следующей строке содержатся данные JSON:
json_string = '{"first_name": "Guido", "last_name":"van Rossum"}'
Проанализировать ее можно следующим образом:
import json
parsed_json = json.loads(json_string)
Теперь вы можете использовать эти данные как словарь:
print(parsed_json['first_name'])
"Guido"
Вы также можете преобразовать следующий словарь в JSON:
d = {
····'first_name': 'Guido',
····'last_name': 'van Rossum',
····'titles': ['BDFL', 'Developer'],
}
print(json.dumps(d))
'{"first_name": "Guido", "last_name": "van Rossum",
··"titles": ["BDFL", "Developer"]}'
Библиотека json была добавлена в Python 2.6. Если вы используете более раннюю версию Python, можете загрузить из PyPI библиотеку simplejson (https://simplejson.readthedocs.org/en/latest/).
simplejson предоставляет такой же API, как и модуль стандартной библиотеки json, но обновляется чаще, чем Python. Разработчики, работающие с более старыми версиями Python, все еще могут использовать функциональность, доступную в библиотеке json, импортировав simplejson. Вы можете выбрать simplejson как полноценную замену для json следующим образом:
import simplejson as json
После импортирования библиотеки simplejson под именем json все предыдущие примеры будут работать так же, как если бы вы использовали стандартную библиотеку json.
Анализ XML
В стандартной библиотеке есть анализатор XML (методы parse() и fromstring() класса xml.etree.ElementTree), но this использует библиотеку Expat и создает объект ElementTree, сохраняющий структуру XML. Это значит, что требуется итерировать по нему и опрашивать потомков, дабы получить содержимое. Если нужно лишь получить данные, обратитесь к untangle или xmltodict. Вы можете установить их командой pip:
$ pip install untangle
$ pip install xmltodict
• untangle (https://github.com/stchris/untangle). Принимает документ XML и возвращает объект Python, чья структура отражает узлы и атрибуты документа. Например, такой файл XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
····<child name="child1" />
</root>
можно загрузить следующим образом:
import untangle
obj = untangle.parse('path/to/file.xml')
можно получить имя элемента-потомка:
obj.root.child['name'] # is 'child1'
• xmltodict (http://github.com/martinblech/xmltodict). Преобразует XML в словарь. Например, такой файл XML:
<mydocument has="an attribute">
··<and>
····<many>elements</many>
····<many>more elements</many>
··</and>
··<plus a="complex">
····element as well
··</plus>
</mydocument>
можно загрузить в объект типа OrderedDict (из модуля collections стандартной библиотеки Python):
import xmltodict
with open('path/to/file.xml') as fd: doc = xmltodict.parse(fd.read())
можно получить доступ к элементам, атрибутам и значениям:
doc['mydocument']['@has'] # is u'an attribute'
doc['mydocument']['and']['many'] # is [u'elements', u'more elements']
doc['mydocument']['plus']['@a'] # is u'complex'
doc['mydocument']['plus']['#text'] # is u'element as well'
С помощью xmltodict можно преобразовать словарь обратно в XML, вызвав функцию unparse(). Она имеет потоковый режим, подходящий для обработки файлов, не помещающихся в память, а также поддерживает пространства имен.
Скраппинг сайтов
Сайты не всегда предлагают данные в удобных форматах вроде CSV или JSON, но HTML представляет собой структурированные данные — здесь вступает в дело скраппинг.
Скраппинг сайтов — это использование компьютерной программы для анализа веб-страницы и сбора необходимых данных в формате, наиболее удобном для вас (при этом сохраняя их структуру).
По мере того как сайты предлагают свои API, они явно просят вас не использовать скраппинг: API открывает вам доступ только к тем данным, которыми владельцы сайта желают поделиться. Перед тем как начать скраппинг, прочтите условия использования целевого сайта и будьте законопослушным гражданином.
lxml
lxml (http://lxml.de/) — это довольно обширная библиотека, написанная для выполнения быстрого анализа документов XML и HTML. Позволяет обрабатывать некоторый объем некорректной разметки.