Hur crawla data i tabeller uppdaterade av javascript

Permalänk
Medlem

Hur crawla data i tabeller uppdaterade av javascript

Hej,

Jag har skrivit många script som hämtar någon form av information från html-kod. Men nu vill jag åt information som inte finns i html-koden utan tabellen av data byggs upp av javascript beroende på de parametrar man väljer.

Det handlar om historiska aktiepriser från OMX; http://www.nasdaqomxnordic.com/shares/historical_prices?Instr...

I källkoden ser man detta funktionsanrop i js.

var query = webCore.createQuery( webCore.marketAction.getDataSeries, {}, { FromDate: from, ToDate: to, Instrument: webCore.getInstrument(), hi__a : "0,1,2,4,21,8,10,11,12,9", ext_xslt_lang: currentLanguage, ext_xslt_options: "," + $("#adjustedId:checked").val() + ",", //$("#unadjustedId:checked").val() + ",", ext_xslt: "hi_table_shares_adjusted.xsl", ext_contenttype : "application/ms-excel", ext_contenttypefilename : "_" + webCore.getInstrument() + ".xls", ext_xslt_hiddenattrs: ",ip,iv,", ext_xslt_tableId: "historicalTable" } ); $("#excelQuery").val( query ); $("#excelForm").attr( "action", webCore.proxyURL ).submit();

där jag tror att webCore.marketAction.getDataSeries är någon form av struct eller define-liknande konstruktion. I webcore_js hittar man nämligen

getDataSeries : { SubSystem: "History", Action: "GetDataSeries", AppendIntraDay: "no",Instrument : null, FromDate : null, ToDate : null, hi__a : "0,1,2,4,21,8,10,11,12,9", ext_xslt: "hi_table.xsl" },

Resultatet av queryn sparas i query men hur uppdateras själva sidan med den datan sedan? Och hur får man ut excel-länken som också finns? Och hur läser jag smidigast ut denna data? Går det att t.ex. att anropa deras js-kod från mina skript, få rådatan färdig och därmed slippa parsa data från html?

Tacksam för lite hjälp...

Visa signatur

Archlinux, Sway och Rust, vad mer behövs?

Permalänk
Medlem
Skrivet av Gräs-Mannen:

Resultatet av queryn sparas i query men hur uppdateras själva sidan med den datan sedan? Och hur får man ut excel-länken som också finns? Och hur läser jag smidigast ut denna data? Går det att t.ex. att anropa deras js-kod från mina skript, få rådatan färdig och därmed slippa parsa data från html?

Lättast är förmodligen att göra samma anrop som deras JS, och behandla deras XML (eller JSON, eller vad du nu får tillbaks). Då slipper du implementera en JS-motor med DOM.

Permalänk

Om du kör chrome i debug läge (ctr + shift + j) kan du se precis vilka xhr query som javascriptet skickar så slipper du till och med reverse engineera deras JS.

Permalänk
Medlem
Skrivet av jop_the_jopsan:

Om du kör chrome i debug läge (ctr + shift + j) kan du se precis vilka xhr query som javascriptet skickar så slipper du till och med reverse engineera deras JS.

Detta verkar smart, har du lust att beskriva lite mer? I Chrome's debug läge ser jag "Resource interpreted as Other but transferred with MIME type undefined."

Visa signatur

Archlinux, Sway och Rust, vad mer behövs?

Permalänk
Skrivet av Gräs-Mannen:

Detta verkar smart, har du lust att beskriva lite mer? I Chrome's debug läge ser jag "Resource interpreted as Other but transferred with MIME type undefined."

Om du trycker på network fliken högst upp så ser du en lista över alla request som sidan har skickat och du kan också granska innehållet i alla requests:en. Jag brukar i vanliga fall använda en packet sniffer (typ wire shark) men denna metoden är riktigt smidig om dom kör https eller om du har mycket annan trafik på ditt nätverkskort.

Permalänk
Medlem

Om inte Chrome-debuggern (eller Firebug) hjälper kan jag rekommendera Fiddler. Alla HTTP-anrop (och lite annat) kan man läsa av strukturerat och snyggt. Fungerar endast med icke krypterade anrop.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Om inte Chrome-debuggern (eller Firebug) hjälper kan jag rekommendera Fiddler. Alla HTTP-anrop (och lite annat) kan man läsa av strukturerat och snyggt. Fungerar endast med icke krypterade anrop.

Kör inte windows.

Verkade inte dyka upp några xhr-anrop. Ska testa wireshark, men brukar vara så mycket data att sortera med det programmet.

Visa signatur

Archlinux, Sway och Rust, vad mer behövs?

Permalänk
Medlem
Skrivet av Gräs-Mannen:

Kör inte windows.

Verkade inte dyka upp några xhr-anrop. Ska testa wireshark, men brukar vara så mycket data att sortera med det programmet.

Om du hämtar in data med javascript kan du garanterat se det i Firebug eller Chromes utvecklingsverktyg.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av Gräs-Mannen:

Kör inte windows.

Verkade inte dyka upp några xhr-anrop. Ska testa wireshark, men brukar vara så mycket data att sortera med det programmet.

Jag kollade snabbt nu bara och fick följande POST anrop

http://www.nasdaqomxnordic.com/webproxy/DataFeedProxy.aspx

med denna post data

xmlquery:<post> <param name="SubSystem" value="History"/> <param name="Action" value="GetDataSeries"/> <param name="AppendIntraDay" value="no"/> <param name="Instrument" value="SSE366"/> <param name="FromDate" value="2006-12-01"/> <param name="ToDate" value="2012-01-02"/> <param name="hi__a" value="0,1,2,4,21,8,10,11,12,9"/> <param name="ext_xslt" value="/nordicV3/hi_table_shares_adjusted.xsl"/> <param name="ext_xslt_options" value=",undefined,"/> <param name="ext_xslt_lang" value="en"/> <param name="ext_xslt_hiddenattrs" value=",ip,iv,"/> <param name="ext_xslt_tableId" value="historicalTable"/> <param name="app" value="/shares/historical_prices"/> </post>

Svaret får du i html format, men det såg ut att vara ganska lätt att parse:a. Sen är det ju möjligt att du måste ta hänsyn till session variabler också, i så fall får du sätta dig och parse:a / skicka cookies.