作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我查看了其他一些答案,但找不到适合我的解决方案。
这是我的完整代码,您可以在没有任何 API key 的情况下运行:
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 输出的“正确”方法是什么?我的最终目标是拥有一个包含 date
和 value
列的 DataFrame,例如
date value
0 2018 1.38567356958762
1 2017 1.89207703836381
2 2016 1.91815510596298
3 2015 2.35552430595799
...
最佳答案
以下情况如何:
解码响应:
decoded_response = response.content.decode('utf-8')
转换为json:
response_json = json.loads(json.dumps(xmltodict.parse(decoded)))
读入DataFrame:
pd.read_json(response_json)
然后你只需要玩东方之类的(文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html)
关于python - 如何从请求中解析 xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59895729/
我是一名优秀的程序员,十分优秀!