【发布时间】:2019-07-15 12:29:36
【问题描述】:
所以我正在编写一个 Python 脚本,以便从 XML 中获取数据,以响应使用 POST 和 requests 库发送的 API 请求。
目前我正在使用我的请求并得到如下回复:
req = requests.post(url + '/endpoint', headers = headers, params = {'search': searchQuery}, verify = False)
print(req.text)
这导致req.text 向我回复我的 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>
我的目标是从name 和sid 的s:key 中获取所有数据并将其打印出来。每个提要有数百个条目,每个提要中只有一个 s:key 和 sid(这是我需要获取的服务标识符)。
我的问题是我不确定如何提取它,因为现在我正尝试像这样使用Element Tree,但它没有返回我想要的结果。
print(req.text)
results = ET.fromstring(req)
for job in results.findall('s:key'):
print(job.get('name'))
我也试过了:
for node in results.findall('s:key'):
if node.attrib['name'] == "sid":
print(node)
这也没有给我想要的信息。
我做错了什么,我该如何解决?我对 Python 有点陌生,对 XML 解析也很陌生,所以我希望能对这个问题有一些见解。
附录:
补充一下,目前它似乎只是打印出所有带有s:key 和name 属性的XML 行,这是我不想要的。
例如,此时的示例输出是:
<s:key name="a">74993868</s:key>
<s:key name="b">0</s:key>
<s:key name="c">date</s:key>
<s:key name="d">6000</s:key>
<s:key name="e">600</s:key>
<s:key name="f">text</s:key>
<s:key name="sid">data I actually want</s:key>
<!-- Etc -->
【问题讨论】:
-
您检查过这个问题是否对您有帮助? stackoverflow.com/questions/18308529/…
-
@daniboy000 我仔细检查并更新了我的问题以更好地反映问题。
标签: python python-3.x post xml-parsing python-requests