>>> from zeep import Client
>>> from datetime import datetime, timedelta
>>>
>>> client = Client("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl", strict=False)
>>>
>>> with client.options(raw_response=False):
... result = client.service.OstatDepo((datetime.now() - timedelta(days=2)),datetime.now())
...
>>> print(result)
{
'schema': <Schema(location=None, tns=None)>,
'_value_1': <Element {urn:schemas-microsoft-com:xml-diffgram-v1}diffgram at 0x7f9011d687c8>
}
>>> [i.text for i in result._value_1[0][0]]
['2018-02-09T00:00:00+03:00', '3005371.02', '7890.29', '3013261.31']
>>>
CoLoR
На сколько я понимаю, это что-то вроде заголовков/схемы но не данные.
Это узел с данными. Он не может его представить, поэтому просто разбирает дотуда, докуда может, а потом просто прицепляетс к атрибутам с именами _value_N неразобранные узлы.
CoLoR
2) может быть полученные данные (при включенной опции raw_response=True) можно как то легко парсить в массив?
Да конечно можно. Просто берёшь и делаешь функцию, которая принимает сырые данные, а возвращает словарь (или список, если там одинаковые элементы есть в данных). А внутри функции через lxml и встроенный в него xpath ищешь всё что нужно и составляешь из этих данных словарь. Словарь - это аналог ассоциативного массива в php, но в питоне это не одно и то же, потому что ассоциативные массивы в php имеют порядок, тогда как в питоне это классическое нагруженное множество с быстрым поиском и без порядка.
Пример обработки сырых данных
>>> from zeep import Client
>>> from datetime import datetime, timedelta
>>> import lxml
>>> import pprint
>>>
>>> client = Client(
... "http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl",
... strict=False)
>>>
>>> with client.options(raw_response=True):
... result = client.service.OstatDepo(
... datetime.now() - timedelta(days=2),
... datetime.now())
...
>>> print(result)
<Response [200]>
>>>
>>> def f(data):
... doc = lxml.etree.fromstring(data)
... nodes = doc.xpath(
... '//xs:element',
... namespaces={'xs': 'http://www.w3.org/2001/XMLSchema'})
... out = [i.attrib for i in nodes]
... return out
...
>>> data = f(result.content)
>>> pprint.pprint(data)
[{'name': 'OD', '{urn:schemas-microsoft-com:xml-msdata}IsDataSet': 'true', '{urn:schemas-microsoft-com:xml-msdata}UseCurrentLocale': 'true'},
{'name': 'odr'},
{'name': 'D0', '{urn:schemas-microsoft-com:xml-msdata}Caption': 'Дата', 'type': 'xs:dateTime', 'minOccurs': '0'},
{'name': 'D1_7', '{urn:schemas-microsoft-com:xml-msdata}Caption': 'от 1 до 7 дней', 'type': 'xs:decimal', 'minOccurs': '0'},
{'name': 'D8_30', '{urn:schemas-microsoft-com:xml-msdata}Caption': 'от 8 до 30 дней', 'type': 'xs:decimal', 'minOccurs': '0'},
{'name': 'depo', '{urn:schemas-microsoft-com:xml-msdata}Caption': 'до востребования', 'type': 'xs:decimal', 'minOccurs': '0'},
{'name': 'total', '{urn:schemas-microsoft-com:xml-msdata}Caption': 'Итого', 'type': 'xs:decimal', 'minOccurs': '0'}]
>>>
Тут не стал удалять пространства имён (они затрудняют взятие значений по ключу), но всё это так же можно удалить внутри функции, чтобы на выход в словаре шли только нужные данные.