Python requests发送GET请求efast.dol.gov接口查询字符串参数丢失问题
问题原因
requests库的params参数只能处理一维键值对结构,当你把嵌套字典作为某个参数的值传入时,它只会提取嵌套字典的键作为参数值,不会自动按照目标接口要求的lucene语法做格式转换,这就是你遇到参数值丢失的根本原因。
解决方案
你需要手动把查询条件拼接成符合要求的lucene语法字符串,再作为q参数的值传入即可,参考代码如下:
import requests # 定义筛选参数 filter_params = { "ein": "814699012", "planyear": "2020", "pn": "001" } # 拼接lucene格式的查询字符串 q_conditions = " AND ".join([f"(({k}:{v}))" for k, v in filter_params.items()]) q_str = f"({q_conditions})" # 构造完整请求参数 args = { "q.parser": "lucene", "size": 200, "sort": "planname asc", "q": q_str, "facet.planyear": "{size:30}", "facet.plancode": "{size:100}", "facet.assetseoy": '{buckets:["{,100000]","[100001,500000]","[500001,1000000]","[1000001,10000000]","[10000001,}"]}', "facet.plantype": "{size:20}", "facet.businesscodecat": "{size:30}", "facet.businesscode": "{size:30}", "facet.state": "{size:100}", "facet.countrycode": '{buckets:["CA","GB","BM","KY"]}', "facet.formyear": "{size:30}" } url = "https://www.efast.dol.gov/services/afs" response = requests.get(url, params=args) # 验证请求地址是否正确 print(response.url)
运行上述代码生成的请求地址和你给出的正确示例格式完全一致,即可正常获取符合筛选条件的数据。如果后续需要新增筛选条件,只要在filter_params字典中追加对应的键值对即可,无需修改拼接逻辑。
内容的提问来源于stack exchange,提问作者MrSam
相关产品推荐
相关产品推荐

