我正在尝试编写一个python脚本,用于检索有关ISI Web of Science出版物的信息。我在GitHub上找到了domoritz的python脚本wos.py。它使用Suds连接到ISI Web of Science Web服务。我已经将它导入我的python脚本中,我按照评论中非常简短的说明尝试了这段代码:
from wos import *
soap = WokmwsSoapClient()
results = soap.search('Hallam')
然后我收到错误:
suds.WebFault: Server raised fault: 'line 1:1: unexpected token: Hallam'
我查看了wos.py中的代码。这是search
函数:
def search(self, query):
qparams = {
'databaseID' : 'WOS',
'userQuery' : query,
'queryLanguage' : 'en',
'editions' : [{
'collection' : 'WOS',
'edition' : 'SCI',
},{
'collection' : 'WOS',
'edition' : 'SSCI',
}]
}
rparams = {
'count' : 5, # 1-100
'firstRecord' : 1,
'fields' : [{
'name' : 'Relevance',
'sort' : 'D',
}],
}
return self.client['search'].service.search(qparams, rparams)
我想也许query
不能只是一个简单的python字符串,正如我在WSDL页面中看到userQuery
实际上是xs:string
类型。但this page表示userQuery
“必须是有效的WOKQL查询语句。此要求在内部强制执行”,这使得我似乎无需传入特殊类型。无论如何,我尝试将'xs:string'
附加到查询的开头但我得到了同样的错误。
有人知道使用这种方法的正确方法吗?
答案 0 :(得分:2)
您可以尝试使用可以安装的Wos Python Client
:
pip install wos
然后你可以像这样使用它:
from wos import WosClient
import wos.utils
with WosClient('JohnDoe', '12345') as client:
print(wos.utils.query(client, 'AU=Knuth Donald'))
您还可以使用CLI工具,如:
wos -u 'JohnDoe' -p '12345' query 'AU=Knuth Donald'
免责声明:我是客户的作者。
答案 1 :(得分:1)
所以显然传入一个python字符串很好,但我需要一个更像搜索查询的字符串。我在前面提到的the website上找到了这个例子:
<soap:Body>
<woksearch:search xmlns:woksearch="http://woksearch.v3.wokmws.thomsonreuters.com">
<!-- this request has the minimum required elements,
but contains all valid retrieve options
for this operation and databaseId -->
<queryParameters>
<databaseId>WOK</databaseId>
<userQuery>AU=Arce, G*</userQuery>
<queryLanguage>en</queryLanguage>
</queryParameters>
....
所以我尝试使用results = soap.search('AU=Hallam')
,这很有用。我现在可以做print results.recordsFound
之类的事情,并得到正确的答案。