我是刚开始刮擦的。我正在尝试刮,即出现在站点中的表,并将其转换为dataframe,但我似乎必须执行一个脚本。我正在使用Rselenium方法。也许Jsonlite更好,但我不知道怎么做。
# Running without problem
require(RSelenium)
rD <- rsDriver()
remDr <- rD[["client"]]
url <- "https://www.rad.cvm.gov.br/ENETCONSULTA/frmGerenciaPaginaFRE.aspx?NumeroSequencialDocumento=62839&CodigoTipoInstituicao=2"
remDr$navigate(url)
# Here is my problem
remDr$findElement('id', 'ctl00_cphPopUp_tbDados')$getElementText()[[1]]发布于 2017-07-13 03:17:01
这个页面有三件棘手的事情: 1)它是一个iFrame,2)访问“未框”页面需要cookie,3)它是用javascript编写的,我发现它更难抓取。
如果您不介意的话,我已经使用了CVM的页面而不是BM&FBovespa,并以BRF为例。要查找损益表,请转到CVM页面 > " 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本httr教程帮助我编写了这段代码。
https://stackoverflow.com/questions/44446738
复制相似问题