2014-09-08 2 views
0

Я хотел бы очистить некоторые данные со страницы, где мне нужно нажать на кнопку (javascript), которая даст мне доступ к таблице.R get html данные из действия javascript

, когда у вас есть http://www.si-vitifrance.com/docs/cvi/cvi13/cartes_inter/c_vin01_coop_com07/, у вас есть доступ к карте и таблице данных с небольшой кнопкой «таблица» слева.

Это открывает новое окно с результатами, и я хотел бы получить этот результат в R. URL этой новой страницы http://www.si-vitifrance.com/docs/cvi/cvi13/cartes_inter/c_vin01_coop_com07/embfiles/table.html?th0, но я не могу иметь доступ к этой странице, если я не прихожу с карты стр.

Так что я хотел бы знать, можно ли имитировать с R то, что производит тот же эффект, что и щелчок по этой кнопке, чтобы получить доступ к этим данным.

Я попытался

path<-"http://www.si-vitifrance.com/docs/cvi/cvi13/cartes_inter/c_vin01_coop_com07/embfiles/table.html?th0" 
webpage <- getURL(path) 
webpage <- readLines(tc <- textConnection(webpage)); close(tc) 

но результат явно не работает

[1] "<!DOCTYPE HTML>"                         
[2] "<html>"                            
[3] "<meta http-equiv=\"Content-type\" content=\"text/html; charset=UTF-8\" />"           
[4] "<link rel=\"stylesheet\" href=\"style.css\" />"                  
[5] "<link rel=\"stylesheet\" href=\"rectable.css\" />"                 
[6] "<script language=\"JavaScript\" type=\"text/javascript\">"               
[7] "<!--"                             
[8] "function sortTable(theColumn,datatype,orderby) {"                  
[9] " document.getElementById(\"content\").innerHTML = \"Veuillez patientez ...\";"          
[10] " var themaId = window.location.search.substr(1,window.location.search.length);"          
[11] " var xslFile = \"styletable.xsl\";"                     
[12] " window.opener.mv_loadAttrTableFile(themaId,true);"                 
[13] " try {"                            
[14] "\ttry {"                            
[15] "  var xslt = new ActiveXObject(\"Msxml2.XSLTemplate.4.0\");"              
[16] "  var xslDoc = new ActiveXObject(\"Msxml2.FreeThreadedDOMDocument.4.0\");"          
[17] " } catch(e) {"                          
[18] "  var xslt = new ActiveXObject(\"Msxml2.XSLTemplate\");"               
[19] "  var xslDoc = new ActiveXObject(\"Msxml2.FreeThreadedDOMDocument\");"           
[20] " }"                            
[21] " xslDoc.async = false;"                       
[22] " xslDoc.resolveExternals = false;"                     
[23] " xslDoc.load(xslFile);"                       
[24] " xslt.stylesheet = xslDoc;"                      
[25] " var xslProc = xslt.createProcessor();"                   
[26] " xslProc.input = window.opener.mv_XMLFileArray[themaId].XMLFile;"             
[27] " if (theColumn) {"                         
[28] "  xslProc.addParameter(\"field\",\"f\" + (parseInt(theColumn) - 1));"            
[29] "  xslProc.addParameter(\"datatype\",datatype);"                 
[30] "  xslProc.addParameter(\"orderby\",orderby);"                  
[31] " }"                            
[32] " xslProc.transform();"                        
[33] " content.innerHTML = xslProc.output;"                    
[34] " } "                             
[35] ""                              
[36] " catch(e) {"                           
[37] " var xsltProcessor = new XSLTProcessor(); "                  
[38] " var xslStylesheet = window.opener.mv_loadXMLDoc(window.opener.mv_Doc.BaseURL + \"embfiles/\" + xslFile,\"xml\");" 
[39] " try {"                           
[40] "  xsltProcessor.importStylesheet(xslStylesheet);"                 
[41] " }"                            
[42] " catch(err) {"                          
[43] "  var xslStylesheet = document.implementation.createDocument(\"\", \"\", null);"         
[44] "  xslStylesheet.async = false;"                     
[45] "  xslStylesheet.load(xslFile);"                     
[46] "  xsltProcessor.importStylesheet(xslStylesheet);"                 
[47] " }"                            
[48] " if (theColumn) {"                         
[49] "  xsltProcessor.setParameter(null,\"field\",\"f\" + (parseInt(theColumn) - 1));"         
[50] "  xsltProcessor.setParameter(null,\"datatype\",datatype);"              
[51] "  xsltProcessor.setParameter(null,\"orderby\",orderby);"               
[52] " }"                            
[53] " var resultFragment = xsltProcessor.transformToFragment(window.opener.mv_XMLFileArray[themaId].XMLFile,document);" 
[54] " document.getElementById(\"content\").innerHTML = \"\";"               
[55] " document.getElementById(\"content\").appendChild(resultFragment);"            
[56] " }"                             
[57] "}"                             
[58] "//-->"                            
[59] "</script>"                           
[60] "<title>Table attributaire</title>"                     
[61] "</head>"                            
[62] "<body onload=\"sortTable();\">"                      
[63] "<div id=\"content\">Veuillez patientez ...</div>"                  
[64] "</body>"                            
[65] "</html>"                            
[66] "" 

какие-либо идеи?

спасибо

ответ

2

enter image description here Вы можете использовать Осматривать Element инструмент из Chrome, чтобы помочь вам определить, какие типы вызовов нажатием кнопки Таблица вызовет.

И вы можете легко получить эти данные, используя этот вызов ajex.

http://www.si-vitifrance.com/docs/cvi/cvi13/cartes_inter/c_vin01_coop_com07/embfiles/th0.xml 

Затем вы можете начать разбор html оттуда.

Чтобы разобрать xml или html, полезным инструментом станет XML. Вот POC о том, как получить заголовок на основе xpath элемента, который вы хотите.

> library(XML) 
> library(RCurl) 
> url <- "http://www.si-vitifrance.com/docs/cvi/cvi13/cartes_inter/c_vin01_coop_com07/embfiles/th0.xml" 
> doc = htmlTreeParse(url, useInternalNodes = T) 
> title <- xpathSApply(doc, "//title[@id='titth0']", fun=xmlValue) 
> title 
[1] "Quantité livrée à la cave coopérative (hl)" 

Python BeautifulSoup для соскабливания:

from bs4 import BeautifulSoup 
import urllib2 
url = "http://www.si-vitifrance.com/docs/cvi/cvi13/cartes_inter/c_vin01_coop_com07/embfiles/th0.xml" 
soup = BeautifulSoup(urllib2.urlopen(url)) 
f0s = soup.find_all('f0') 
for f0 in f0s: 
    print f0.text 

Выход:

Commune 
07- BOURG-SAINT-ANDEOL 
07- VILLENEUVE-DE-BERG 
07- LABLACHERE 
... 
07- BERRIAS-ET-CASTELJAU 
07- BESSAS 
+0

бак вы !! связанная проблема есть что-то для получения хорошо сформированного фрейма данных? как xtable? – delaye

+0

@ delaye вы просите волшебную функцию превратить xml в красивую рамку данных? –

+0

конечно :-) R красивый! в любом случае спасибо @ B.Mr.W – delaye

Смежные вопросы