API 由于错误,GET 请求不允许查询字符串
API GET request wont allow query string due to error
我正在尝试让 API 以 .json 格式获取一些数据。
当我 运行 请求时,我在 API 地址中收到语法错误。下面是我尝试 运行.
的代码
我可以针对父站点发出基本请求并收到 并且我过去已经在此处发送了 get 请求,没有任何问题。
在此先感谢您的帮助。
pv_data = requests.get("https://api.patentsview.org/uspc_mainclasses/query?q={"_and":[{"_contains":{"uspc_mainclass_id":["800","424","514","506","435","436","536"]}},{"_gt"{"patent_date":"2009-12-31"}},{"_lt":{"patent_date":"2021-04-01"}}]}&f=["assignee_city","assignee_country","assignee_latitude","assignee_longitude","assignee_num_patents_for_uspc_mainclass","assignee_organization","assignee_total_num_patents","forprior_country","forprior_date"]")
...以及响应
File "<ipython-input-31-0b6aea36e1fe>", line 1
pv_data = requests.get("https://api.patentsview.org/uspc_mainclasses/query?q={"_and":[{"_contains":{"uspc_mainclass_id":["800","424","514","506","435","436","536"]}},{"_gt"{"patent_date":"2009-12-31"}},{"_lt":{"patent_date":"2021-04-01"}}]}&f=["assignee_city","assignee_country","assignee_latitude","assignee_longitude","assignee_num_patents_for_uspc_mainclass","assignee_organization","assignee_total_num_patents","forprior_country","forprior_date"]")
^
语法错误:语法无效
这里的问题是 python 混淆了应该使用哪个双引号 ("
) 来结束字符串。一种解决方案是使用 \
.
转义所有内部 "
但我建议您使用 request
API 本身来处理查询参数。
从文档中,您可以传递 params
关键字参数以将数据发送到 URL.
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
您可以看到 URL 已通过打印 URL:
正确编码
>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
由于您也在 url 字符串中使用双引号,因此解释器会将 "
字符的前两个实例之间的任何内容作为有效字符串,而不会知道如何处理剩下的事情。
您可以通过这样的起始引号来避免此错误 '
:
pv_data = requests.get('https://api.patentsview.org/uspc_mainclasses/query?q={"_and":[{"_contains":{"uspc_mainclass_id":["800","424","514","506","435","436","536"]}},{"_gt"{"patent_date":"2009-12-31"}},{"_lt":{"patent_date":"2021-04-01"}}]}&f=["assignee_city","assignee_country","assignee_latitude","assignee_longitude","assignee_num_patents_for_uspc_mainclass","assignee_organization","assignee_total_num_patents","forprior_country","forprior_date"]')
您必须使用不同类型的引号,单引号 = ' 、双引号 = " 或三引号 = ''' 这样您就可以在不同的行上写相同的句子。
'''
this is a code
'written'
on
"different"
line
'''
我正在尝试让 API 以 .json 格式获取一些数据。
当我 运行 请求时,我在 API 地址中收到语法错误。下面是我尝试 运行.
的代码我可以针对父站点发出基本请求并收到
在此先感谢您的帮助。
pv_data = requests.get("https://api.patentsview.org/uspc_mainclasses/query?q={"_and":[{"_contains":{"uspc_mainclass_id":["800","424","514","506","435","436","536"]}},{"_gt"{"patent_date":"2009-12-31"}},{"_lt":{"patent_date":"2021-04-01"}}]}&f=["assignee_city","assignee_country","assignee_latitude","assignee_longitude","assignee_num_patents_for_uspc_mainclass","assignee_organization","assignee_total_num_patents","forprior_country","forprior_date"]")
...以及响应
File "<ipython-input-31-0b6aea36e1fe>", line 1
pv_data = requests.get("https://api.patentsview.org/uspc_mainclasses/query?q={"_and":[{"_contains":{"uspc_mainclass_id":["800","424","514","506","435","436","536"]}},{"_gt"{"patent_date":"2009-12-31"}},{"_lt":{"patent_date":"2021-04-01"}}]}&f=["assignee_city","assignee_country","assignee_latitude","assignee_longitude","assignee_num_patents_for_uspc_mainclass","assignee_organization","assignee_total_num_patents","forprior_country","forprior_date"]")
^
语法错误:语法无效
这里的问题是 python 混淆了应该使用哪个双引号 ("
) 来结束字符串。一种解决方案是使用 \
.
"
但我建议您使用 request
API 本身来处理查询参数。
从文档中,您可以传递 params
关键字参数以将数据发送到 URL.
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
您可以看到 URL 已通过打印 URL:
正确编码>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
由于您也在 url 字符串中使用双引号,因此解释器会将 "
字符的前两个实例之间的任何内容作为有效字符串,而不会知道如何处理剩下的事情。
您可以通过这样的起始引号来避免此错误 '
:
pv_data = requests.get('https://api.patentsview.org/uspc_mainclasses/query?q={"_and":[{"_contains":{"uspc_mainclass_id":["800","424","514","506","435","436","536"]}},{"_gt"{"patent_date":"2009-12-31"}},{"_lt":{"patent_date":"2021-04-01"}}]}&f=["assignee_city","assignee_country","assignee_latitude","assignee_longitude","assignee_num_patents_for_uspc_mainclass","assignee_organization","assignee_total_num_patents","forprior_country","forprior_date"]')
您必须使用不同类型的引号,单引号 = ' 、双引号 = " 或三引号 = ''' 这样您就可以在不同的行上写相同的句子。
'''
this is a code
'written'
on
"different"
line
'''