2017-01-10 1 views
0

Je veux extraire une table periodicaly de bas site.Grattez site avec R en naviguant doPostBack

liste des prix change lorsque les noms cliqué bloc de construction (BLOK 16 A, 16 B BLOK, BLOK 16 C, ...). L'URL ne change pas, la page change en déclenchant

javascript:__doPostBack('ctl00$ContentPlaceHolder1$DataList2$ctl04$lnk_blok','') 

J'ai essayé 3 façons après avoir recherché google et starckoverflow. Ce que j'ai essayé de ne pas 1: cela ne triger pas l'événement doPostBack

postForm("http://www.kentkonut.com.tr/tr/modul/projeler/daire_fiyatlari.aspx?id=44", ctl00_ContentPlaceHolder1_DataList2_ctl03_lnk_blok="ctl00$ContentPlaceHolder1$DataList2$ctl03$lnk_blok") 

ce que j'ai essayé n ° 2: sélénium semblent distance aux travaux sur (http://localhost:4444/) mais ne remotedriver pas naviguer. renvoie cette erreur. (Erreur dans checkError (res). Erreur non définie dans l'appel HTTR HTTR sortie: longueur (url) == 1 est pas vrai)

library(RSelenium) 
startServer() 
remDr <- remoteDriver() 
remDr <- remoteDriver(remoteServerAddr = "localhost" 
        , port = 4444L, browserName = "firefox") 
remDr$open() 
remDr$getStatus() 
remDr$navigate("http://www.kentkonut.com.tr/tr/modul/projeler/daire_fiyatlari.aspx?id=44") 

ce que j'ai essayé pas 3: cette autre façon de événement triger dopostback. il ne navigue pas.

base.url <- "http://www.kentkonut.com.tr/tr/modul/projeler/", 
event.target <- 'ctl00$ContentPlaceHolder1$DataList2$ctl03$lnk_blok', 
action <- "daire_fiyatlari.aspx?id=44" 

ftarget <- paste0(base.url, action) 
dum <- getURL(ftarget) 
event.val <- unlist(strsplit(dum,"__EVENTVALIDATION\" value=\""))[2] 
event.val <- unlist(strsplit(event.val,"\" />\r\n\r\n<script"))[1] 
view.state <- unlist(strsplit(dum,"id=\"__VIEWSTATE\" value=\""))[2] 
view.state <- unlist(strsplit(view.state,"\" />\r\n\r\n\r\n<script"))[1] 
web.data <- postForm(ftarget, "form name" = "ctl00_ContentPlaceHolder1_DataList2_ctl03_lnk_blok", 
        "method" = "POST", 
        "action" = action, 
        "id" = "ctl00_ContentPlaceHolder1_DataList2_ctl03_lnk_blok", 
        "__EVENTTARGET"=event.target, 
        "__EVENTVALIDATION"=event.val, 
        "__VIEWSTATE"=view.state) 

merci pour votre aide.

Répondre

1
library(rvest)  
url<-"http://www.kentkonut.com.tr/tr/modul/projeler/daire_fiyatlari.aspx?id=44" 
    pgsession<-html_session(url) 
    t<-html_table(html_nodes(read_html(pgsession), css = "#ctl00_ContentPlaceHolder1_DataList1"), fill= TRUE)[[1]] 
    even_indices<-seq(2,length(t$X1),2) 
    t<-t[even_indices,] 
    t<-t[2:(length(t$X1)),] 

CODE ÉDITÉ:

library(rvest)  
url<-"http://www.kentkonut.com.tr/tr/modul/projeler/daire_fiyatlari.aspx?id=44" 
pgsession<-html_session(url) 
pgform<-html_form(pgsession)[[1]] 
page<-rvest:::request_POST(pgsession,"http://www.kentkonut.com.tr/tr/modul/projeler/daire_fiyatlari.aspx?id=44", 
          body=list(
          `__VIEWSTATE`=pgform$fields$`__VIEWSTATE`$value, 
          `__EVENTTARGET`="ctl00$ContentPlaceHolder1$DataList2$ctl01$lnk_blok", 
          `__EVENTARGUMENT`="", 
          `__VIEWSTATEGENERATOR`=pgform$fields$`__VIEWSTATEGENERATOR`$value, 
          `__VIEWSTATEENCRYPTED`=pgform$fields$`__VIEWSTATEENCRYPTED`$value, 
          `__EVENTVALIDATION`=pgform$fields$`__EVENTVALIDATION`$value 
          ), 
          encode="form" 
          ) 
# in the above example change eventtarget as "ctl00$ContentPlaceHolder1$DataList2$ctl02$lnk_blok" to get different table 

t<-html_table(html_nodes(read_html(page), css = "#ctl00_ContentPlaceHolder1_DataList1"), fill= TRUE)[[1]] 
even_indices<-seq(2,length(t$X1),2) 
t<-t[even_indices,] 
t<-t[2:(length(t$X1)),] 
+0

merci @Bharath votre chemin table geting est très clair, merci. Ce que j'ai besoin d'explorer depuis ce site ne se cache pas le long des pages mais des sous-pages qui apparaissent quand on clique sur BLOK 16 B ou BLOK 16 C en activant js ctl00 $ ContentPlaceHolder1 $ DataList2 $ ctl00 $ lnk_blok ctl00 $ ContentPlaceHolder1 $ DataList2 $ ctl01 $ lnk_blok ctl00 $ ContentPlaceHolder1 $ DataList2 $ ctl02 $ lnk_blok ctl00 $ ContentPlaceHolder1 $ DataList2 $ ctl03 $ lnk_blok –

+0

Alors, vous voulez aller à ces pages? http://www.kentkonut.com.tr/tr/modul/projeler/daire_detay.aspx?id=44&blok=318&daire=01 http://www.kentkonut.com.tr/tr/modul/projeler/daire_detay .aspx? id = 44 & blok = 318 & daire = 02 – Bharath

+0

désolé, non, lorsque vous cliquez sur les liens jaunes sur cette photo https://postimg.org/image/edbocvd3z/ L'URL ne change pas mais les changements de table ci-dessous –