因此,我正在编写Python脚本,以便从XML获取数据,这些数据是我对使用POST
和requests
库发送的API请求的响应。
目前,我正在像这样使用我的请求,并得到如下回复:
req = requests.post(url + '/endpoint', headers = headers, params = {'search': searchQuery}, verify = False)
print(req.text)
这导致req.text
向我发送我的XML,该XML的结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/static/atom.xsl"?>
<feed>
<!-- Feed elements>
<entry>
<!-- Other Elements -->
<content type="text/xml">
<s:dict>
<!-- Other keys. -->
<s:key name="sid">DATA I WANT HERE</s:key>
<!-- Other keys. -->
</s:dict>
<!-- Lots of other dicts here. -->
</content>
</entry>
<! -- Other entries -->
</feed>
我的目标是从s:key
中name
的{{1}}获取所有数据,并打印出来。每个提要有数百个条目,每个提要中只有一个sid
,其中包含s:key
(这是我需要获得的服务标识符)。
我的问题是我不确定如何提取它,因为现在我正尝试像这样使用Element Tree,但是它没有返回我想要的结果。
sid
我也尝试过:
print(req.text)
results = ET.fromstring(req)
for job in results.findall('s:key'):
print(job.get('name'))
这也没有给我我想要的信息。
我在做什么错,如何解决?我有点不熟悉Python,并且对XML解析非常陌生,因此希望对这个问题有一些见识。
附录:
要添加的内容是,目前看来,它只是打印出我不想要的所有带有for node in results.findall('s:key'):
if node.attrib['name'] == "sid":
print(node)
和属性s:key
的XML行。
例如,当前示例输出为:
name
答案 0 :(得分:1)
一种可能的方法是使用Regex:
使用正则表达式,您将找到组,例如Regex。
>>> import re
>>> m = re.search(r'\<s\:\S+\sname=\"sid\"\>(.+)\<.+', string, re.MULTILINE)
>>> print(m.groups())
('DATA I WANT HERE',)