Rselenium Jsonlite 刮擦

Rselenium Jsonlite scraping

我是 Scraping 的新手。我正在尝试 抓取 出现在站点中的 table 并转换为 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]]

这个页面有三个棘手的地方:1) 它是一个 iFrame,2) 访问 "unframed" 页面需要 cookie,以及 3) 它是用 javascript、 我发现更难刮。

如果您不介意的话,我使用了 CVM 的页面而不是 BM&FBovespa,并以 BRF 为例。 要查找损益表,请转至 CVM's page > "Companhias"(在您的左侧)> 点击 "Consulta de Documentos de Companhias Abertas" > 选择公司 > 点击 DFP > 最后,select "Consulta" 位于所需文档的正上方。

u1就是上面说的路径生成的url。使用 Chrome 的 SelectorGadget 或查看浏览器的开发工具,您会发现 u2。就个人而言,我发现 SelectorGadget 更易于使用。当您启动它时,它会给您一个 url,让您可以在 iFrame 中 select。

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,该网站将 return 显示一条错误消息 "Object reference not set to an instance of an object"。要摆脱这种情况,您需要将 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 select 或。我在 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帮我写了这段代码。