Pandas调用API时含特殊字符的输入参数导致返回结果异常如何修复?
问题根因
- 核心问题1:URL参数未编码:
&属于URL的保留字符,作用是分隔不同查询参数。直接把含&、空格、中文这类特殊字符的参数拼接到URL中时,服务端会将&后的内容识别为独立参数,导致实际拿到的cat参数只有&前面的部分,返回的查询结果不符合预期,因此取到的data[0]不是对应输入的正确结果,看起来就像“错误取到第二条数据”。 - 问题2:代码存在大小写不匹配的语法错误:函数内定义的变量是
product_ID、product_Name,赋值给row时写为product_id、product_name,Python大小写敏感,该问题会触发未定义变量报错。
修复方案
不要手动拼接URL参数,改用requests.get自带的params参数传递查询参数,requests会自动对参数值做URL编码,无需手动处理即可解决特殊字符问题,同时修复变量名大小写错误即可。
修复后完整代码
import pandas as pd import requests def getSearchReturn(row): para = row['input'] url = "http://localhost/product" try: # 通过params参数传参,自动完成URL编码,兼容特殊字符 return_json = requests.get(url, params={"cat": para}).json() data = return_json['data'] product_id = data[0]['product_id'] product_name = data[0]['product_name'] except: product_id = None product_name = None row['productID'] = product_id row['productName'] = product_name return row data = pd.read_csv("input.csv") data = data.apply(getSearchReturn, axis=1) data.to_csv("output.csv", index=False)
验证说明
如果需要确认请求是否正确,可以在请求后打印resp.url查看完整请求地址,你会看到abc & bbc会被自动编码为abc+%26+bbc,服务端可以正确识别完整的参数值。
内容的提问来源于stack exchange,提问作者pakwai122
相关产品推荐
相关产品推荐

