2017-06-08 1 views
0

Je suis nouveau chez Scraping. J'essaie de gratter le tableau qui apparaît dans un site et se transformer en dataframe mais il semble que je dois exécuter un script. J'utilise l'approche Rselenium. Probablement Jsonlite fonctionne mieux, mais je ne sais pas comment.Rselenium Jsonlite grattage

# 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]] 
+0

Il ne semble pas être possible d'accéder de façon déterministe à la page avec la table sans se connecter (ce que la grande majorité d'entre nous ne peut pas faire). C'est un site SharePoint horrible et il utilise un tracker "State View" assez lourd pour maintenir l'état, donc vous devriez commencer à partir de la page de début, orchestrer un login et probablement cliqueter des boutons. Enfin, la page finale est en fait une page avec un 'iframe' donc vous devrez taper le' iframe' quand vous obtenez la source de la page. Espérons que quelqu'un d'autre avec un peu plus de temps libre peut fournir un échantillon de code représentatif. – hrbrmstr

Répondre

0

Il y a trois choses délicates sur cette page: 1) Il est iFrame, 2) Les cookies sont nécessaires pour accéder à la page « sans cadre », et 3) Il est écrit en javascript, witch je trouve plus difficile à gratter. Si cela ne vous dérange pas, j'ai utilisé la page de CVM au lieu de BM & FBovespa et utilisé BRF comme exemple. Pour trouver le compte de résultat, allez à CVM's page> "Companhias" (sur votre gauche)> cliquez sur "Consulta de Documentos de Compañias Abertas"> choisissez la société> cliquez sur DFP> et enfin, sélectionnez "Consulta" juste au-dessus du document désiré.

u1 est l'URL générée par le chemin mentionné ci-dessus. Utilisez le SelectorGadget de Chrome ou consultez les outils de développement de votre navigateur et vous trouverez u2. Personnellement, je trouve SelectorGadget plus facile à utiliser. Lorsque vous le lancerez, il vous donnera une URL qui vous permet de sélectionner dans l'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" 

Si fermez votre navigateur et allez directement à u2, le site renvoie un message d'erreur indiquant « référence d'objet non définie à une instance d'un objet ». Pour se débarrasser de cela, vous voulez passer les cookies de 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") 

Si cette page a été écrit en html, on peut utiliser le sélecteur #clt00_cphPopUp_tbDados. J'ai trouvé cette solution de contournement bizarre le 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 m'a aidé à écrire ce morceau de code.