这个页面有三个棘手的地方:1) 它是一个 iFrame,2) 访问“非框架”页面需要 cookie,3) 它是用 javascript 编写的,我觉得更难抓取。
如果您不介意,我使用 CVM 的页面而不是 BM&FBovespa 并使用 BRF 作为示例。
要查找损益表,请转到CVM's page >“Companhias”(在您的左侧)> 点击“Consulta de Documentos de Companhias Abertas”> 选择公司 > 点击 DFP > 最后选择上方的“Consulta”所需的文件。
u1是上述路径生成的url。使用 Chrome 的 SelectorGadget 或查看浏览器的开发工具,您会找到u2。就个人而言,我发现 SelectorGadget 更易于使用。当你启动它时,它会给你一个 url,让你在 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,网站将返回错误消息“对象引用未设置为对象的实例”。要摆脱这种情况,您需要将 cookie 从 u1 传递到 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 帮我写了这段代码。