调用Nasdaq数据API报xmlsquery解析错如何存入pandas
问题解决方法
返回Error getting base data: Error parsing xmlsquery的核心原因是POST请求提交的xmlquery参数结构不完整、格式错误,接口无法解析查询规则,和Cookie、反爬拦截无关,不需要使用Selenium。
正确请求规则
- 请求地址:
http://www.nasdaqomxnordic.com/webproxy/DataFeedProxy.aspx - 请求方法:POST
- 必要请求头:仅需携带正常浏览器标识的
User-Agent,以及Content-Type: application/x-www-form-urlencoded,无需携带浏览器复制的大量冗余Cookie,无效Cookie反而可能导致请求异常。 - 核心表单参数:必须传入结构完整的
xmlquery字段,值为符合接口规范的XML格式查询语句,定义查询的市场、标的类型、返回字段等规则。
可运行代码示例
先安装必要依赖:pip install requests pandas lxml
完整请求与数据存入DataFrame的代码如下:
import requests import pandas as pd # 请求头配置,不要加多余冗余字段 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded" } # 核心POST参数,xmlquery必须保持完整XML结构 form_data = { "xmlquery": """<post> <param name="Exchange" value="NMF"/> <param name="SubSystem" value="Prices"/> <param name="Action" value="GetDataFeed"/> <param name="App" value="/obligationer/danmark"/> <param name="InstrumentType" value="BOND"/> <param name="Market" value="CPH:GOV,CPH:MORT,CPH:CORP"/> <param name="XPath" value="//inst[@type!='']"/> <param name="Columns" value="nm,id,cpn,rt,mtyp,trdprc,yld,vol,dtd,mty,cr"/> <param name="RecursiveMarketElement" value="True"/> <param name="lang" value="da"/> </post>""" } resp = requests.post( "http://www.nasdaqomxnordic.com/webproxy/DataFeedProxy.aspx", headers=headers, data=form_data, timeout=30 ) resp.encoding = "utf-8" # 接口返回XML格式数据,直接解析为DataFrame df = pd.read_xml(resp.text, xpath=".//inst") # 按需重命名字段,对应Columns参数传入的字段顺序 df.columns = [ "债券名称", "产品ID", "票息率", "评级", "做市商类型", "最新成交价", "收益率", "成交量", "付息日", "到期日", "计价货币" ] # 打印前5行验证结果 print(df.head())
常见踩坑说明
- 不要手动对
xmlquery的XML内容做URL编码,requests库提交form表单时会自动完成编码处理,手动编码会破坏参数结构,再次触发解析错误。 - 若需要自定义返回字段,可修改
xmlquery中Columns参数的字段编码;若需要加筛选规则(如到期日范围、债券类型筛选),直接在XML结构中新增对应<param>节点即可,只要XML语法合法就不会报解析错误。 - 接口默认返回全量匹配的丹麦债券数据(包含国债、抵押债、企业债),若需要分页可在
xmlquery中新增<param name="PageSize" value="每页条数"/>、<param name="PageNumber" value="页码"/>参数控制。
内容的提问来源于stack exchange,提问作者kabk
相关产品推荐
相关产品推荐

