【问题标题】:Is there an easy way to convert zeep response to json,pandas,xml?有没有一种简单的方法可以将 zeep 响应转换为 json、pandas、xml?
【发布时间】:2019-11-07 12:43:26
【问题描述】:

我正在使用 python 3.6 和 zeep 3.4.0

Zeep 返回原始数据,我无法将其转换为 xml/json/pandas 对象。

我尝试使用 bs4 从 text1 中获取表格,但没有成功。 序列化 text1 得到 json,也没有运气。

from zeep import Client, Settings

settings = Settings(xml_huge_tree=True)

client = Client('http://www.cbr.ru/secinfo/secinfo.asmx?WSDL', settings=settings)
s = '2019-06-21T00:00:00'

with client.settings(raw_response=True):
    result = (client.service.IDRepoRUBXML(s))

#print(dir(result))    
text1 = (result.text)

print(text1)
#
#data = literal_eval(text1.decode('utf8'),)

def escape(t):
    """HTML-escape the text in `t`."""
    return (t.replace("&amp;","&").replace("&lt;","<" ).replace( "&gt;",">").replace("&#39;","'").replace("&quot;",'"'))

m = escape(text1)
print(m)

我需要从 zeep 检索可读的 xml 或 json/pandas 表。

【问题讨论】:

    标签: python json pandas wsdl zeep


    【解决方案1】:

    我自己找到了方法:)

    from zeep import Client, Settings
    from bs4 import BeautifulSoup
    
    settings = Settings(xml_huge_tree=True)
    
    client = Client('http://www.cbr.ru/secinfo/secinfo.asmx?WSDL', settings=settings)
    s = '2019-06-21T00:00:00'
    
    with client.settings(raw_response=True):
        result = (client.service.IDRepoRUBXML(s))
    
    #print(dir(result))    
    text1 = (result.text)
    
    def escape(t):
        t = t.replace("&amp;","&")
        t1 = t.replace("&lt;","<" )
        t2 = t1.replace( "&gt;",">")
        t3 = t2.replace("&#39;","'")
        t4 = t3.replace("&quot;",'"')
        return t4
    
    m = escape(text1)
    
    
    #j = parser.feed(m)
    if(m is not None):
        soup = BeautifulSoup(m,'lxml')
    else:
         print("")
    
    items = soup.find_all('item')
    
    for item in items:
        discounts = item.find_all('dt')
        beg_6d = discounts[0]['beg']
        min_6d = discounts[0]['min']
        max_6d = discounts[0]['max']
        beg7_14 = discounts[1]['beg']
        min7_14 = discounts[1]['min']
        max7_14 = discounts[1]['max']         
    
        for attr in item.attrs:
    
            dateredemption = item.attrs['dateredemption']
            em = item.attrs['em']
            isin = item.attrs['isin']
            price = item.attrs['price_fnd']
            regn = item.attrs['regn']
    
        print(isin,regn,em,dateredemption,price,beg_6d,min_6d,max_6d, beg7_14,min7_14,max7_14) 
    

    【讨论】:

      【解决方案2】:

      您可以使用Minidom 转换为 XML。

      from zeep import Client
      import xml.dom.minidom
      
      client = Client('http://www.dneonline.com/calculator.asmx?wsdl')
      
      def Add(num1, num2):
          with client.settings(raw_response=True):
              return xml.dom.minidom.parseString(client.service.Add(num1, num2).content).toprettyxml(indent="   ",encoding='utf8')
      
      print (Add(2,5))
      

      【讨论】:

        【解决方案3】:

        如果你只是想从 serialize_object 中获取一个 python dict 类型,你可以指定你想要的类型。

        从 zeep 导入助手

        _json = helpers.serialize_object(zeep_object, dict)

        【讨论】:

        • 这应该是正确的答案.. 谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-09-24
        • 2014-01-10
        • 2010-09-06
        • 1970-01-01
        • 2020-05-02
        • 1970-01-01
        • 2021-12-25
        相关资源
        最近更新 更多