有關於這個頁的三個技巧:1)這是一個iFrame,2)餅乾需要訪問「無框」頁面,以及3)它是用JavaScript編寫的,巫婆,我覺得更難刮。
如果您不介意,我已經使用CVM的頁面而不是BM & FBovespa並以BRF爲例。 要查找損益表,請前往CVM's page>「Companhias」(在左側)>點擊「Consulta de Documentos de Companhias Abertas」>選擇公司>點擊DFP>,最後選擇「Consulta」所需的文件。
u1
是上述路徑生成的網址。使用Chrome瀏覽器的SelectorGadget或查看瀏覽器的開發工具,你會發現u2
。就我個人而言,我發現SelectorGadget更易於使用。當您啓動它時,它會爲您提供一個可讓您在iFrame中進行選擇的網址。
u1 <- "https://www.rad.cvm.gov.br/enetconsulta/frmGerenciaPaginaFRE.aspx?CodigoTipoInstituicao=1&NumeroSequencialDocumento=62776"
u2 <- "https://www.rad.cvm.gov.br/enetconsulta/frmDemonstracaoFinanceiraITR.aspx?Informacao=2&Demonstracao=4&Periodo=0&Grupo=DFs+Consolidadas&Quadro=Demonstra%C3%A7%C3%A3o+do+Resultado&NomeTipoDocumento=DFP&Titulo=Demonstra%C3%A7%C3%A3o%20do%20Resultado&Empresa=BRF%20SA&DataReferencia=31/12/2016&Versao=1&CodTipoDocumento=4&NumeroSequencialDocumento=62776&NumeroSequencialRegistroCvm=1413&CodigoTipoInstituicao=1"
如果關閉瀏覽器,直奔u2
,網站會返回一個錯誤信息:「對象引用不設置到對象的實例」。要擺脫這種情況,您希望將u1
中的cookies傳遞給u2
。
r <- GET(u1)
biscoitos <- cookies(r) #cookies de acesso para u2
page <- GET(u2, encoding = "utf-8",
set_cookies("ASP.NET_SessionId" = biscoitos$value[1] ,
"BIGipServerpool_www.rad.cvm.gov.br_443" = biscoitos$value[2],
"TS01871345" = biscoitos$value[3]))
pg_content <- content(page, "raw")
如果這個頁面是用HTML編寫的,一個可以使用#clt00_cphPopUp_tbDados
選擇。我發現這個奇怪的解決方法的JavaScript。
writeBin(pg_content, "temp.txt")
html_page <- read_html("temp.txt", encoding = "utf-8")
write_html(html_page, "temp.html", encoding = "utf-8")
df <- readHTMLTable("temp.html", encoding = "utf-8")
df <- df$ctl00_cphPopUp_tbDados
This httr tutorial幫我寫了這段代碼。
似乎沒有一種方法可以確定性地在沒有登錄的情況下訪問該表的頁面(這是我們絕大多數人無法做到的)。這是一個糟糕的SharePoint站點,它使用相當重量級的「視圖狀態」跟蹤器來維護狀態,所以您應該從開始頁面開始,編排一個登錄信息並可能會編排按鈕點擊。最後,最後一頁實際上是一個帶有「iframe」的頁面,因此當你獲得頁面源代碼時,你必須打開「iframe」。希望有更多業餘時間的人可以提供代表性的代碼示例。 – hrbrmstr