Поток информационных новостей сыпется со всех сторон. Поиск достоверной информацией становится всё затруднительнее. Для того, чтобы сделать правильный выбор необходимо лучше всего опираться на первоисточник. В мире экономики и финансов, пожалуй, одним их главных источников является Центральный Банк России. У Банка России реализован веб-сервис для получения ежедневных данных.

Популярным способом взаимодействия между информационными системами через web является SOAP. SOAP – один из протоколов WEB API сервиса. Данный протокол подразумевает обмен структурированными XML сообщениями при помощи одного из протоколов передачи, например, SMTP, FTP, HTTP, HTTPS. Гарантией успешного обмена является осуществление корректного обмена (создания и передачи, а также получения и интерпретации ответа) XML запросами.

Для того, чтобы создать оптимальный процесс обмена XML запросами предлагаю использовать Python библиотека zeep.

#Импортируем необходимые библиотеки
from zeep import Client
from zeep import helpers

Рассмотрим получение новостей SOAP сервера ЦБ РФ с января по апрель 2021 года, будем использовать метод NewsInfo(FromDate, ToDate). В аргументах данного метода передадим даты и окончания периода за который мы хотим получить новости (тип аргументов - System.DateTime).

Вынесем параметры метода NewsInfo, а также ссылку на SOAP сервер ЦБ РФ в переменные для удобства.

#параметры для применения метода NewsInfo
FromDate=datetime(2021, 1, 1)
ToDate=datetime(2021,4,1)
#ссылка с которой происходит выгрузка
url = 'http://www.cbr.ru/dailyinfowebserv/dailyinfo.asmx?WSDL'

Выполним запрос SOAP серверу ЦБ РФ с применением метода получения новостей.

#запрашиваем данные из SOAP сервиса 
client = Client(url)
result = client.service.NewsInfo(FromDate, ToDate)

В результате выполнения запроса мы имеем XML файл в формате System.Data.Dataset. Данный документ содержит таблицу News, в которой находят столбцы:

  • Doc_id - ID документа.

  • DocDate - Дата документа.

  • Title - Заголовок.

  • Url - URL документа.

Используя одну из функций библиотеки zeep, преобразуем XML-документ в словарь.

#преобразуем полученные данные в dict
data = helpers.serialize_object(result, dict)

Просмотр результата запроса свидетельствует о том, что формат данных соответствует формату json. Для выполнения дальнейшего комфортного анализа преобразуем результирующую таблицу в pandas dataframe.

#формируем датафрейм с данным
import json
import pandas as pd 
data = data.get('_value_1')
df = pd.DataFrame.from_dict(data)
#преобразование датафрема к датафрейму из столбца '_value_1', а в строках News
df = pd.DataFrame(df['_value_1']
                  .apply(pd.Series))
#преобразование датафрема к необходимому виду
df = pd.DataFrame(df['News']
                  .apply(pd.Series))

Мы получили желаемый результат.

Но при просмотре информации о датафрейме, мы можем заметить, что столбец DocDate имеет тип object. Дальнейшая работа с этими данными может требовать анализа дат, поэтому необходимо выполнить преобразование типа данных столбца.

Преобразуем данные столбца DocDate к дате формата “YYYY-mm-dd”:

#Создаем столбец Date, который является конвертацией столбца DocDate в тип datetime64
#параметр utc=True указываем, чтобы избежать ошибок
df['Date'] = pd.to_datetime(df['DocDate'], utc=True)
#Приводим дату в необходимый формат
df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')

Таким образом, у нас есть датафрейм с точной информацией от первоисточника ЦБ РФ. Мы можем с уверенностью демонстрировать результаты анализа, не сомневаясь в достоверности данных.

Надеюсь, моя статья была для вас полезной. Буду рада вашим репостам и всегда готова ответить на ваши вопросы!

Комментарии (1)


  1. souls_arch
    30.04.2022 05:40

    Брэшут все! Не стесняясь в глаза миллионам. С голубых экранов и на площадях-сдадионах. Деньги не пахнут, а политика, лишь инструмент их заработка на сегодняшний день.

    Поэтому без разницы из достоверного или нет источника инфа. Тут только "ректальный вспоминатель" сможет дать более-менее точный ответ, если применить его по цепочке от источника.