两种方法可参考:

Call a SOAP Service with plain old requests

Calling a SOAP WebService with Python Suds

# Call a SOAP Service with plain old requests
import requests
url="http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"
#headers = {'content-type': 'application/soap+xml'}
headers = {'content-type': 'text/xml'}
body = """<?xml version="1.0" encoding="UTF-8"?>
			 <SOAP-ENV:Envelope xmlns:ns0="http://ws.cdyne.com/WeatherWS/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" 
			 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
			 	<SOAP-ENV:Header/>
			 	  <ns1:Body><ns0:GetWeatherInformation/></ns1:Body>
			 </SOAP-ENV:Envelope>"""
response = requests.post(url,data=body,headers=headers)
print response.content
---------------------华丽的分割线1----------------------
# Calling a SOAP WebService with Python Suds
from suds.client import Client
url="http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"
client = Client(url)
print client ## shows the details of this service
result = client.service.GetWeatherInformation() 
print result ## see: restult.txt below

这里采用的是requests方法

构造header``body,uri

无论是使用python代码还是使用postman工具

获得返回的结果都是二进制流,解析后乱码

尝试各种设置编码为'utf-8' 仍输出乱码, 初步判断: 对返回的结果解析编码的问题

构造的body为:

body = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<soap:Envelope xmlns:exm=\"http://schemas.microsoft.com/exchange/services/2006/messages\" xmlns:ext=\"http://schemas.microsoft.com/exchange/services/2006/types\" xmlns:a=\"http://www.w3.org/2005/08/addressing\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n<soap:Header>\n<a:Action soap:mustUnderstand=\"1\">http://schemas.microsoft.com/exchange/2010/Autodiscover/Autodiscover/GetFederationInformation</a:Action>\n<a:To soap:mustUnderstand=\"1\">https://autodiscover-s.outlook.com/autodiscover/autodiscover.svc</a:To>\n<a:ReplyTo>\n<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>\n</a:ReplyTo>\n</soap:Header>\n<soap:Body>\n<GetFederationInformationRequestMessage xmlns=\"http://schemas.microsoft.com/exchange/2010/Autodiscover\">\n<Request>\n<Domain>" + domain + "</Domain>\n</Request>\n</GetFederationInformationRequestMessage>\n</soap:Body>\n</soap:Envelope>"

构造的header为

headers = {
    'content-type': 'text/xml',
    'SOAPAction': 'http://schemas.microsoft.com/exchange/2010/Autodiscover/Autodiscover/GetFederationInformation',
    'User-Agent': 'AutodiscoverClient',

解决方法:

判断为返回结果解码造成的

尝试在header中添加'Accept-Encoding':'utf-8'

headers = {
    'content-type': 'text/xml',
    'SOAPAction': 'http://schemas.microsoft.com/exchange/2010/Autodiscover/Autodiscover/GetFederationInformation',
    'User-Agent': 'AutodiscoverClient',
    'Accept-Encoding':'utf-8',

乱码问题成功解决:

导语最近用到处理soap接口协议,使用post方法发送数据在这个地方停留许久,故将解决方法记录下来soapsoap 依赖于XML文件首先要处理XML文件python中有xmltodict,dicttoxml两个库可以使用使用方法两种解决方法:一种是 requests方法另一种是使用suds库两种方法可参考:Call a SOAP Service with plain old requestsCalling a SOAP WebService with Python Suds# C
python 自动化接口soap协议 1.传参:参数我是按照字符串的形式传进去的,注意是三引号字符串,当时原本想的是传参的区域改变完数据直接加上三引号来拼接,结果是不行的,需要json.dumps格式就行了。 2.读文件:这个地方遇到的一个坑是自认为解析完之后就可以了,和request爬虫一个原理,这个地方同样需要json来转化。 遇到的第二个问题,接口有限制1分钟之内不能重复发送请求,所以捕捉异...
上文中webservice学习(1) ,使用soaplib建立了一个超简单的webservice服务,也是用suds调用成功了,那如果想使用http包自己组成一个soap消息来调用接口怎么办呢? 这个时候我们就想到使用wsdl这个文件了,我看了些wsdl的文档,也参照这其他人使用java,php等语言实现的soap消息调用的格式来写,但是怎么调试都没成功。。 就是说他总是会返回500或
TF-IDF(term frequency-inverse document frequency)是一种在文本挖掘、信息检索、自然语言处理等领域中广泛使用的算法,用于衡量某一个词在文档中的重要性。 在 Python 中,可以使用 scikit-learn 库中的 TfidfVectorizer 类来实现 TF-IDF 算法。 首先,需要导入 TfidfVectorizer 类: ```python from sklearn.feature_extraction.text import TfidfVectorizer 然后,实例化 TfidfVectorizer 类,并传入相应的参数: ```python vectorizer = TfidfVectorizer(input='content', # 输入的是文本内容 encoding='utf-8', # 编码格式 decode_error='strict', # 解码错误的处理方式 strip_accents=None, # 是否移除音调字符 lowercase=True, # 是否将文本转化为小写 preprocessor=None, # 预处理函数 tokenizer=None, # 分词函数 analyzer='word', # 分析器,可以是 'word' 或者 'char' stop_words=None, # 停用词列表 token_pattern=r'(?u)\b\w\w+\b', # 分词模式 ngram_range=(1, 1), # n-gram 范围 max_df=1.0, # 最大文档频率 min_df=1, # 最小文档频率 max_features=None, # 最大特征数 vocabulary=None, # 词汇表 binary=False, # 是否进行二进制编码 dtype=<class 'numpy.float64'>) # 矩阵的数据类型 接下来,使用 fit_transform 方法对文本进行 fit 和 transform: