Разберемся, каким образом забирать данные о курсе валют в реальном времени с сайта.
#!pip3 install requests
Импортируем модуль и отправим запрос к сервису с курсами валют с помощью метода GET:
import requests
response = requests.get('https://www.cbr-xml-daily.ru/daily_json.js')
Посмотрим, что получили в ответ:
response
<Response [200]>
Мы получили объект ответа, который содержит всю нужную нам информацию. По умолчанию на экран выводится HTTP-код ответа 200. Это означает, что запрос был корректным, и сервер отдал нам нужную информацию.
Код ответа в виде числа можно получить с помощью метода status_code
:
response.status_code
200
Адрес, по которому мы обращались, возвращает результат в json
формате. Эти данные уже лежат в атрибуте text
в полученном ответе response
.
response.text[:230]
'{\n "Date": "2020-11-12T11:30:00+03:00",\n "PreviousDate": "2020-11-11T11:30:00+03:00",\n "PreviousURL": "\\/\\/www.cbr-xml-daily.ru\\/archive\\/2020\\/11\\/11\\/daily_json.js",\n "Timestamp": "2020-11-11T21:00:00+03:00",\n "Va'
Сейчас текст хранится просто в строковой переменной. Далее мы можем превратить эту строку в словарь. Сделать это можно с помощью JSON-парсера либо воспользовавшись методом json
, который уже встроен в объект ответа response
.
currencies = response.json()
currencies
{'Date': '2020-11-12T11:30:00+03:00', 'PreviousDate': '2020-11-11T11:30:00+03:00', 'PreviousURL': '//www.cbr-xml-daily.ru/archive/2020/11/11/daily_json.js', 'Timestamp': '2020-11-11T21:00:00+03:00', 'Valute': {'AUD': {'ID': 'R01010', 'NumCode': '036', 'CharCode': 'AUD', 'Nominal': 1, 'Name': 'Австралийский доллар', 'Value': 55.5553, 'Previous': 55.6634}, 'AZN': {'ID': 'R01020A', 'NumCode': '944', 'CharCode': 'AZN', 'Nominal': 1, 'Name': 'Азербайджанский манат', 'Value': 44.8543, 'Previous': 44.9663}, 'GBP': {'ID': 'R01035', 'NumCode': '826', 'CharCode': 'GBP', 'Nominal': 1, 'Name': 'Фунт стерлингов Соединенного королевства', 'Value': 101.1959, 'Previous': 100.9597}, 'AMD': {'ID': 'R01060', 'NumCode': '051', 'CharCode': 'AMD', 'Nominal': 100, 'Name': 'Армянских драмов', 'Value': 15.4226, 'Previous': 15.4824}, 'BYN': {'ID': 'R01090B', 'NumCode': '933', 'CharCode': 'BYN', 'Nominal': 1, 'Name': 'Белорусский рубль', 'Value': 29.8443, 'Previous': 29.8966}, 'BGN': {'ID': 'R01100', 'NumCode': '975', 'CharCode': 'BGN', 'Nominal': 1, 'Name': 'Болгарский лев', 'Value': 45.9469, 'Previous': 46.2316}, 'BRL': {'ID': 'R01115', 'NumCode': '986', 'CharCode': 'BRL', 'Nominal': 1, 'Name': 'Бразильский реал', 'Value': 14.0734, 'Previous': 14.1843}, 'HUF': {'ID': 'R01135', 'NumCode': '348', 'CharCode': 'HUF', 'Nominal': 100, 'Name': 'Венгерских форинтов', 'Value': 25.2623, 'Previous': 25.23}, 'HKD': {'ID': 'R01200', 'NumCode': '344', 'CharCode': 'HKD', 'Nominal': 10, 'Name': 'Гонконгских долларов', 'Value': 98.2879, 'Previous': 98.5358}, 'DKK': {'ID': 'R01215', 'NumCode': '208', 'CharCode': 'DKK', 'Nominal': 1, 'Name': 'Датская крона', 'Value': 12.0698, 'Previous': 12.1411}, 'USD': {'ID': 'R01235', 'NumCode': '840', 'CharCode': 'USD', 'Nominal': 1, 'Name': 'Доллар США', 'Value': 76.2075, 'Previous': 76.3978}, 'EUR': {'ID': 'R01239', 'NumCode': '978', 'CharCode': 'EUR', 'Nominal': 1, 'Name': 'Евро', 'Value': 90.0468, 'Previous': 90.3557}, 'INR': {'ID': 'R01270', 'NumCode': '356', 'CharCode': 'INR', 'Nominal': 10, 'Name': 'Индийских рупий', 'Value': 10.2533, 'Previous': 10.3014}, 'KZT': {'ID': 'R01335', 'NumCode': '398', 'CharCode': 'KZT', 'Nominal': 100, 'Name': 'Казахстанских тенге', 'Value': 17.8351, 'Previous': 17.8067}, 'CAD': {'ID': 'R01350', 'NumCode': '124', 'CharCode': 'CAD', 'Nominal': 1, 'Name': 'Канадский доллар', 'Value': 58.3966, 'Previous': 58.7179}, 'KGS': {'ID': 'R01370', 'NumCode': '417', 'CharCode': 'KGS', 'Nominal': 100, 'Name': 'Киргизских сомов', 'Value': 90.8924, 'Previous': 91.1196}, 'CNY': {'ID': 'R01375', 'NumCode': '156', 'CharCode': 'CNY', 'Nominal': 1, 'Name': 'Китайский юань', 'Value': 11.5124, 'Previous': 11.5689}, 'MDL': {'ID': 'R01500', 'NumCode': '498', 'CharCode': 'MDL', 'Nominal': 10, 'Name': 'Молдавских леев', 'Value': 44.5788, 'Previous': 44.6771}, 'NOK': {'ID': 'R01535', 'NumCode': '578', 'CharCode': 'NOK', 'Nominal': 10, 'Name': 'Норвежских крон', 'Value': 84.4685, 'Previous': 84.8544}, 'PLN': {'ID': 'R01565', 'NumCode': '985', 'CharCode': 'PLN', 'Nominal': 1, 'Name': 'Польский злотый', 'Value': 19.9689, 'Previous': 20.1758}, 'RON': {'ID': 'R01585F', 'NumCode': '946', 'CharCode': 'RON', 'Nominal': 1, 'Name': 'Румынский лей', 'Value': 18.4607, 'Previous': 18.5828}, 'XDR': {'ID': 'R01589', 'NumCode': '960', 'CharCode': 'XDR', 'Nominal': 1, 'Name': 'СДР (специальные права заимствования)', 'Value': 108.2162, 'Previous': 108.8592}, 'SGD': {'ID': 'R01625', 'NumCode': '702', 'CharCode': 'SGD', 'Nominal': 1, 'Name': 'Сингапурский доллар', 'Value': 56.5002, 'Previous': 56.7507}, 'TJS': {'ID': 'R01670', 'NumCode': '972', 'CharCode': 'TJS', 'Nominal': 10, 'Name': 'Таджикских сомони', 'Value': 67.2914, 'Previous': 67.4445}, 'TRY': {'ID': 'R01700J', 'NumCode': '949', 'CharCode': 'TRY', 'Nominal': 10, 'Name': 'Турецких лир', 'Value': 93.8112, 'Previous': 92.7428}, 'TMT': {'ID': 'R01710A', 'NumCode': '934', 'CharCode': 'TMT', 'Nominal': 1, 'Name': 'Новый туркменский манат', 'Value': 21.8047, 'Previous': 21.8592}, 'UZS': {'ID': 'R01717', 'NumCode': '860', 'CharCode': 'UZS', 'Nominal': 10000, 'Name': 'Узбекских сумов', 'Value': 73.4256, 'Previous': 73.7359}, 'UAH': {'ID': 'R01720', 'NumCode': '980', 'CharCode': 'UAH', 'Nominal': 10, 'Name': 'Украинских гривен', 'Value': 27.0623, 'Previous': 27.1854}, 'CZK': {'ID': 'R01760', 'NumCode': '203', 'CharCode': 'CZK', 'Nominal': 10, 'Name': 'Чешских крон', 'Value': 33.9575, 'Previous': 34.1443}, 'SEK': {'ID': 'R01770', 'NumCode': '752', 'CharCode': 'SEK', 'Nominal': 10, 'Name': 'Шведских крон', 'Value': 88.3074, 'Previous': 88.6563}, 'CHF': {'ID': 'R01775', 'NumCode': '756', 'CharCode': 'CHF', 'Nominal': 1, 'Name': 'Швейцарский франк', 'Value': 83.1143, 'Previous': 83.6961}, 'ZAR': {'ID': 'R01810', 'NumCode': '710', 'CharCode': 'ZAR', 'Nominal': 10, 'Name': 'Южноафриканских рэндов', 'Value': 48.8169, 'Previous': 49.5167}, 'KRW': {'ID': 'R01815', 'NumCode': '410', 'CharCode': 'KRW', 'Nominal': 1000, 'Name': 'Вон Республики Корея', 'Value': 68.4903, 'Previous': 68.5394}, 'JPY': {'ID': 'R01820', 'NumCode': '392', 'CharCode': 'JPY', 'Nominal': 100, 'Name': 'Японских иен', 'Value': 72.2654, 'Previous': 72.7217}}}
Теперь данные лежат в словаре и мы можем легко получать необходимые значения.
currencies['Valute']['USD']
{'ID': 'R01235', 'NumCode': '840', 'CharCode': 'USD', 'Nominal': 1, 'Name': 'Доллар США', 'Value': 76.2075, 'Previous': 76.3978}
Созраните текущий курс евро в файле csv формата.