如何从POST请求中收到的XML中正确检索数据

问题描述 投票:0回答:1

所以我正在编写一个Python脚本,以便从XML中获取数据,这是我为响应使用POSTrequests库发送的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>

我的目标是从s:keyname获取sid的所有数据并打印出来。每个Feed有数百个条目,每个条目中只有一个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:keyname属性的所有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 -->
python python-3.x post xml-parsing python-requests
1个回答
1
投票

一种可能的方法是使用正则表达式:

使用正则表达式,你会发现这些组,如Regex

>>> import re
>>> m = re.search(r'\<s\:\S+\sname=\"sid\"\>(.+)\<.+', string, re.MULTILINE)
>>> print(m.groups())
('DATA I WANT HERE',)
© www.soinside.com 2019 - 2024. All rights reserved.