一、首先写一个ArrayOfString转化成list的函数
这里主要针对比较简单的webservice,没有嵌套的
参考:https://www.pianshen.com/article/2473663801/
先将ArrayOfString转化成dict字典,key是string,value是一长串的我们需要的信息
然后再把dict字典转化成list列表
这里使用到suds库中的sudsobject,sudsobject中有个函数是asdict可以将Array Of String处理成dict或list
from suds import sudsobject def get_ArrayOfString_value(array, info): ''' webserveice接口调用会返回ArrayOfString,将其转化为python可以使用的dict''' getArray = array # array就是webservice调用后获取的结果ArrayOfString getDict = sudsobject.asdict(getArray) getList = getDict.get('%s' % info) # 返回指定键的值 return getList
二、调用webservice接口
soap_client2.py
from suds.client import Client from suds.xsd.doctor import ImportDoctor, Import from get_ArrayOfString_value import get_ArrayOfString_value url = 'http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl' # 接口要求在被调用时显式地指定调用标准 imp=Import('http://www.w3.org/2001/XMLSchema', location='http://www.w3.org/2001/XMLSchema.xsd') imp.filter.add('http://WebXml.com.cn/') client=Client(url,plugins=[ImportDoctor(imp)]) #print(client) result=client.service.getWeather('北京') #print(result) result_list=get_ArrayOfString_value(result,'string') #print(result_list) print(result_list[4])
获取的结果
result_list[4]
今日天气实况:气温:27℃;风向/风力:东北风 2级;湿度:56%
通过 print(client) 可以查询到webservice的method和相应参数有
Methods (6):
getRegionCountry()
getRegionDataset()
getRegionProvince()
getSupportCityDataset(xs:string theRegionCode)
getSupportCityString(xs:string theRegionCode)
getWeather(xs:string theCityCode, xs:string theUserID)
通过 print(result) 打印出调用函数查询出的值
(ArrayOfString){ string[] = "直辖市 北京", "北京", "792", "2020/07/02 15:07:50", "今日天气实况:气温:27℃;风向/风力:东北风 2级;湿度:56%", "紫外线强度:最弱。", "中国人民保险中暑指数:无中暑风险,天气舒适,令人神清气爽的一天,不用担心中暑的困扰。 健臻·血糖指数:易波动,气温多变,血糖易波动,请注意监测。 穿衣指数:热,适合穿T恤、短薄外套等夏季服装。 洗车指数:不宜,有雨,雨水和泥水会弄脏爱车。 紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。 ", "7月2日 雷阵雨转中雨", "21℃/29℃", "东北风小于3级", "4.gif", "8.gif", "7月3日 雷阵雨转多云", "20℃/26℃", "东北风转东南风小于3级", "4.gif", "1.gif", "7月4日 多云转雷阵雨", "21℃/28℃", "西南风转西风小于3级", "1.gif", "4.gif", "7月5日 雷阵雨", "21℃/29℃", "东风小于3级", "4.gif", "4.gif", "7月6日 多云", "22℃/30℃", "南风小于3级", "1.gif", "1.gif", }