Python3请求EveMarketer XML接口报strconv.ParseUint无效语法问题求解
问题解决方法
错误来源分析
strconv.ParseUint是Go语言标准库中字符串转无符号整数的方法,该报错是EveMarketer服务端返回的参数校验错误,并非你本地Python代码的语法错误。
原因是你从Excel读取的typeid被xlrd默认解析为浮点数类型,比如原始值18读取后为18.0,直接转字符串拼接后URL的typeid参数值为18.0,不符合接口要求的正整数格式,服务端解析参数失败返回该错误。
解决步骤
- 第一步:将读取到的typeid先转为整数类型,再拼接为URL参数
将代码中拼接URL的部分:
修改为:url = "https://api.evemarketer.com/ec/marketstat?typeid=" + str(i) + "&usesystem=30000142"# 先转int去掉浮点数的.0后缀,再转字符串 url = f"https://api.evemarketer.com/ec/marketstat?typeid={int(i)}&usesystem=30000142" - 第二步:可选优化,增加响应状态校验,提前识别请求异常
可以在拿到响应后先判断状态码是否为200,再解析返回内容:resp = http.request("GET", url) if resp.status == 200: print(resp.data.decode('utf-8')) else: print(f"请求失败,状态码:{resp.status},返回内容:{resp.data.decode('utf-8')}") - 第三步:可选性能优化,批量传参减少请求次数
该接口支持同时传入多个typeid,用英文逗号分隔,你可以先把所有typeid处理为整数后拼接为一个字符串,只发一次请求即可拿到所有数据,避免循环请求被接口限流。
修改后完整参考代码
import xlrd import xlwt import urllib3 import xml.etree.ElementTree as ET import xmltodict loc = "C:\\Users\\nhoff\\AutomatedTrader\\Data.xls" wb = xlrd.open_workbook(loc) sheet = wb.sheet_by_index(0) typeID = sheet.col_values(0) wb = xlwt.Workbook() score = 1 http = urllib3.PoolManager() for i in typeID[1:]: # 跳过空值行 if not i: continue # 转整数后拼接参数 url = f"https://api.evemarketer.com/ec/marketstat?typeid={int(i)}&usesystem=30000142" try: resp = http.request("GET", url) if resp.status == 200: print(resp.data.decode('utf-8')) else: print(f"请求typeid={int(i)}失败,状态码:{resp.status}") except urllib3.exceptions.HTTPError as error: print(error)
内容的提问来源于stack exchange,提问作者Nathan Hoffman
相关产品推荐
相关产品推荐

