Я посмотрел несколько других ответов, но не смог найти решение, которое бы сработало для меня.
Вот мой полный код, который вы можете запустить без ключа API:
import requests
r = requests.get('http://api.worldbank.org/v2/country/GBR/indicator/NY.GDP.MKTP.KD.ZG')
Если я печатаю r.text
, я получаю строку, которая начинается с
'\ufeff<?xml version="1.0" encoding="utf-8"?>\r\n<wb:data page="1" pages="2" per_page="50" total="60" sourceid="2" lastupdated="2019-12-20" xmlns:wb="http://www.worldbank.org">\r\n <wb:data>\r\n <wb:indicator id="NY.GDP.MKTP.KD.ZG">GDP growth (annual %)</wb:indicator>\r\n <wb:country id="GB">United Kingdom</wb:country>\r\n <wb:countryiso3code>GBR</wb:countryiso3code>\r\n <wb:date>2019</wb:date>\r\n`
и продолжается некоторое время.
Один из способов получить то, что я хотел бы из этого ( что, насколько я понимаю, крайне не рекомендуется) использовать регулярное выражение:
import regex
import pandas as pd
import re
pd.DataFrame(
re.findall(
r"<wb:date>(\d{4})</wb:date>\r\n <wb:value>((?:\d\.)?\d{14})", r.text
),
columns=["date", "value"],
)
Что такое "правильный" способ анализа этого вывода xml? Моя конечная цель - создать DataFrame со столбцами date
и value
, такими как
date value
0 2018 1.38567356958762
1 2017 1.89207703836381
2 2016 1.91815510596298
3 2015 2.35552430595799
...