【问题标题】:Accessing Data from Javascript API call从 Javascript API 调用访问数据
【发布时间】:2022-06-10 22:12:58
【问题描述】:

我正在尝试访问此网站上显示的数据:Link 使用python请求或requests-html。 站点调用此 API:API

我尝试使用 Insomnia(复制 cURL)复制 POST 请求。我收到响应代码 200,但出现错误提示“获取基础数据时出错:解析 xmlsquery 时出错”

如何将这些数据放入 pandas 数据框?我想避免使用 Selenium。

谢谢!

【问题讨论】:

  • 嗨 kabk,欢迎来到 StackOverflow。您作为 API 复制的链接不是可以查询的实际 API。我认为您一直坚持使用 selenium 并抓取数据或寻找(开放)API 来访问该数据。
  • 也许先显示你的代码,这样我们就可以看到你的方法有什么问题。
  • 谢谢。我在网页抓取和 api 方面的经验非常有限。那我会坚持使用硒。
  • 好的,但我解决了这个问题

标签: javascript python api web-scraping python-requests


【解决方案1】:

我不知道你用什么发送请求
但是当我使用模块requests 时,问题会导致+ 在查询中。

requests+ 转换为%2B,但服务器需要+

需要使用urllib.parsesafe="+"手动转换数据

data = {
    "xmlquery": "<post>\n<param+name=\"Exchange\"+value=\"NMF\"/>\n<param+name=\"SubSystem\"+value=\"Prices\"/>\n<param+name=\"Action\"+value=\"GetMarket\"/>\n<param+name=\"inst__a\"+value=\"0,1,2,5,21,23\"/>\n<param+name=\"ext_xslt\"+value=\"/nordicV3/paging_inst_table.xsl\"/>\n<param+name=\"Market\"+value=\"GITS:CO:CPHCB,GITS:CO:CPHBB,M:GITS:CO:CPHTA,GITS:CO:CPHAU,GITS:CO:CPHSA\"/>\n<param+name=\"RecursiveMarketElement\"+value=\"True\"/>\n<param+name=\"XPath\"+value=\"//inst[@itid='2'+or+@itid='3']\"/>\n<param+name=\"ext_xslt_lang\"+value=\"en\"/>\n<param+name=\"ext_xslt_tableId\"+value=\"bondsSearchDKTable\"/>\n<param+name=\"ext_xslt_options\"+value=\",noflag,\"/>\n<param+name=\"ext_xslt_hiddenattrs\"+value=\",fnm,isrid,dlt,tp,bb,ib,cpt,rps,os,lt,st,itid,lists,it,mkt,\"/>\n<param+name=\"ext_xslt_notlabel\"+value=\",fnm\"/>\n<param+name=\"ext_xslt_jspcbk\"+value=\"doPaging\"/>\n<param+name=\"ext_xslt_jsscbk\"+value=\"doSortPager\"/>\n<param+name=\"ext_xslt_sorder\"+value=\"descending\"/>\n<param+name=\"ext_xslt_sattr\"+value=\"chp\"/>\n<param+name=\"ext_xslt_start\"+value=\"0\"/>\n<param+name=\"ext_xslt_size\"+value=\"100\"/>\n<param+name=\"inst__an\"+value=\"id,nm,fnm,isin,cpnrt,bp,ap,lsp,chp,atap,ed,dlt,cr,isrid,tp,bb,ib,cpt,rps,os,lt,st,itid,lists,it,mkt\"/>\n<param+name=\"app\"+value=\"/obligationer/danmark\"/>\n</post>"
}

data_str = urllib.parse.urlencode(data, safe="+")

完整的工作代码:

它需要所有的标头才能访问服务器。

import requests
import urllib.parse

data = {
    "xmlquery": "<post>\n<param+name=\"Exchange\"+value=\"NMF\"/>\n<param+name=\"SubSystem\"+value=\"Prices\"/>\n<param+name=\"Action\"+value=\"GetMarket\"/>\n<param+name=\"inst__a\"+value=\"0,1,2,5,21,23\"/>\n<param+name=\"ext_xslt\"+value=\"/nordicV3/paging_inst_table.xsl\"/>\n<param+name=\"Market\"+value=\"GITS:CO:CPHCB,GITS:CO:CPHBB,M:GITS:CO:CPHTA,GITS:CO:CPHAU,GITS:CO:CPHSA\"/>\n<param+name=\"RecursiveMarketElement\"+value=\"True\"/>\n<param+name=\"XPath\"+value=\"//inst[@itid='2'+or+@itid='3']\"/>\n<param+name=\"ext_xslt_lang\"+value=\"en\"/>\n<param+name=\"ext_xslt_tableId\"+value=\"bondsSearchDKTable\"/>\n<param+name=\"ext_xslt_options\"+value=\",noflag,\"/>\n<param+name=\"ext_xslt_hiddenattrs\"+value=\",fnm,isrid,dlt,tp,bb,ib,cpt,rps,os,lt,st,itid,lists,it,mkt,\"/>\n<param+name=\"ext_xslt_notlabel\"+value=\",fnm\"/>\n<param+name=\"ext_xslt_jspcbk\"+value=\"doPaging\"/>\n<param+name=\"ext_xslt_jsscbk\"+value=\"doSortPager\"/>\n<param+name=\"ext_xslt_sorder\"+value=\"descending\"/>\n<param+name=\"ext_xslt_sattr\"+value=\"chp\"/>\n<param+name=\"ext_xslt_start\"+value=\"0\"/>\n<param+name=\"ext_xslt_size\"+value=\"100\"/>\n<param+name=\"inst__an\"+value=\"id,nm,fnm,isin,cpnrt,bp,ap,lsp,chp,atap,ed,dlt,cr,isrid,tp,bb,ib,cpt,rps,os,lt,st,itid,lists,it,mkt\"/>\n<param+name=\"app\"+value=\"/obligationer/danmark\"/>\n</post>"
}

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0', 
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',    
}

url = 'http://www.nasdaqomxnordic.com/webproxy/DataFeedProxy.aspx'

data_str = urllib.parse.urlencode(data, safe="+")

response = requests.post(url, data=data_str, headers=headers)

print(response.text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2016-02-14
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多