当查询规范中有空格时,使用 Python 的 urlb2 查询 solr 请求

Querying solr requests with Python's urllb2 when there are white spaces in the query specification

我想以一种有效的方式查询 Python 中的 Solr mlt 术语。 我有一个全名列表,例如:

names = ['Bobby Johnson', 'James Bob']

要在 solr 中查询每个人的 mlt 条款,您必须使用以下 URLs:

'http://localhost:8382/solr/core/mlt?q=name:"Bobby Johnson"&fl=*,score&mlt.fl=concepts&mlt.interestingTerms=details'

'http://localhost:8382/solr/core/mlt?q=name:"James Bob"&fl=*,score&mlt.fl=concepts&mlt.interestingTerms=details'

在上面的例子中可以看到,带白色space的全名查询是用引号表示的。这是有效的,除了它是重复性工作,因为名称列表很大。

如果我尝试更有效地执行此操作,通过使用 f 字符串在 for 循环中查询列表中的每个项目,我会收到无效的 URL 错误(见下文)。 我的代码:

from urllib.request import urlopen

for name in names:
    req = urlopen(f'http://localhost:8382/solr/core/mlt?q=name:"{name}",score&mlt.fl=concepts&mlt.interestingTerms=details')
    request_json = json.load(req)
    interesting_terms = request_json['interestingTerms']
    print(interesting_terms)

#Error message:
InvalidURL: URL can't contain control characters. '/solr/core/mlt?q=name:"Bobby Johnson",score&mlt.fl=concepts&mlt.interestingTerms=details' (found at least ' ')

任何具体ideas/examples如何处理Python中的多个请求,当查询包含白色space?

期望的输出:能够为列表中的每个全名发送请求并以 json 格式返回信息。

在将 URL 发送到 urlopen 之前,您必须在生成 URL 时对值进行转义:

from urllib.request import urlopen
from urllib.parse import quote_plus

for name in names:
    req = urlopen(f'http://localhost:8382/solr/core/mlt?q=name:"{quote_plus(name)}",score&mlt.fl=concepts&mlt.interestingTerms=details')
    ...