我试图从链接中获取一个JSON响应,作为urllib请求的参数。但是它给了我一个错误,它不能包含控制字符。
我该如何解决这个问题?
start_url = "https://devbusiness.un.org/solr-sitesearch-output/10//0/ds_field_last_updated/desc?bundle_fq =procurement_notice&sm_vid_Institutions_fq=&sm_vid_Procurement_Type_fq=&sm_vid_Countries_fq=&sm_vid_Sectors_fq= &sm_vid_Languages_fq=English&sm_vid_Notice_Type_fq=&deadline_multifield_fq=&ts_field_project_name_fq=&label_fq=&sm_field_db_ref_no__fq=&sm_field_loan_no__fq=&dm_field_deadlineFrom_fq=&dm_field_deadlineTo_fq =&ds_field_future_posting_dateFrom_fq=&ds_field_future_posting_dateTo_fq=&bm_field_individual_consulting_fq="
source = urllib.request.urlopen(start_url).read()
我得到错误是:
URL can't contain control characters. '/solr-sitesearch-output/10//0/ds_field_last_updated/desc?bundle_fq =procurement_notice&sm_vid_Institutions_fq=&sm_vid_Procurement_Type_fq=&sm_vid_Countries_fq=&sm_vid_Sectors_fq= &sm_vid_Languages_fq=English&sm_vid_Notice_Type_fq=&deadline_multifield_fq=&ts_field_project_name_fq=&label_fq=&sm_field_db_ref_no__fq=&sm_field_loan_no__fq=&dm_field_deadlineFrom_fq=&dm_field_deadlineTo_fq =&ds_field_future_posting_dateFrom_fq=&ds_field_future_posting_dateTo_fq=&bm_field_individual_consulting_fq=' (found at least ' ')
7条答案
按热度按时间juzqafwq1#
将空白替换为:
如果问题出在空格上的话。
6psbrbz92#
空格是不允许在网址,我删除了他们,它似乎是现在工作:
gcmastyq3#
Solr搜索字符串可能会变得很奇怪。最好在发出请求之前使用'quote'方法对字符进行编码。请参见下面的示例:
迟做总比不做好...
gmol16394#
你现在可能已经知道了,但让我们把它写在这里。
URL中不能有任何 * 空格 * 字符,但在bundle_fqedm_field_deadlineTo_fq之后有2个
把这些拿掉你就可以走了
3lxsmp7m5#
就像错误信息所说的,在你的url中有一些control characters,顺便说一句,这似乎不是一个有效的。
piztneat6#
你需要在URL中使用encode the control characters。特别是空格需要编码为%20。
bz4sfanl7#
首先解析url,然后对url元素进行编码就可以了。
尽管url中有双正斜杠和空格,代码仍返回JSON文档。