2014-05-21 3 views
2

Je tente d'extraire un emplacement spécifique d'une page Web en utilisant XPath pour le trouver. Le chemin semble être "caché" car d'autres parties de la page Web sont facilement accessibles, mais cette section renvoie une valeur NULL.Problèmes d'éraflure de la page Web dans R

J'ai essayé d'utiliser plusieurs paquets, mais je ne suis pas vraiment un expert dans le sujet, donc je ne peux pas vraiment évaluer ce qui se passe et si c'est un moyen de le résoudre.

C'est ce que j'ai essayé.

require("XML") 
require("scrapeR") 
require("httr") 

url <- "http://www.claro.com.ar/portal/ar/pc/personas/movil/eq-new/?eq=537" 
xp <- '//*[@id="dv_MainContainerEquiposResumen"]/div[1]/h1' 

page <- scrape(url) 
xpathApply(page[[1]], xp, xmlValue) 
# NULL 

url.get = GET(url) 
xpathSApply(content(url.get), xp) 
# NULL 

webpage = getURL(url) 
doc = htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE) 
xpathSApply(doc, xp) 
# NULL 

Répondre

2

Vous pouvez gratter la page en utilisant Sélénium et le paquet RSelenium:

url <- "http://www.claro.com.ar/portal/ar/pc/personas/movil/eq-new/?eq=537" 
xp <- '//*[@id="dv_MainContainerEquiposResumen"]/div[1]/h1' 
require(RSelenium) 
RSelenium::startServer() 
remDr <- remoteDriver() 
remDr$open() 
remDr$navigate(url) 
webElem <- remDr$findElement(value = xp) 
> webElem$getElementAttribute("outerHTML")[[1]] 
[1] "<h1>Samsung Galaxy Core</h1>" 
> webElem$getElementAttribute("innerHTML")[[1]] 
[1] "Samsung Galaxy Core" 
remDr$close() 
remDr$closeServer() 
+0

C'est excellent! Merci pour votre réponse! – marbel

+1

Heureux d'aider .. – jdharrison

1

Cette partie de la page semble être ajoutée plus tard via javascript. Il n'existe pas dans la source de la page. Je ne pense pas que scrapeR évalue le javascript.

Les données semblent provenir d'un appel AJAX à http://www.claro.com.ar/portal/ar/ceq/js/ceq.js?ver=1.0.0. C'est peut-être en regardant le référant de savoir quelles données envoyer.

Il semble que cela va fonctionner pour obtenir ces données

library(RCurl) 
getURL("http://www.claro.com.ar/portal/ar/ceq/js/ceq.js?ver=1.0.0", 
    .opts=curlOptions(referer="http://www.claro.com.ar/portal/ar/pc/personas/movil/eq-new/?eq=537")) 
+0

Je suppose que je pouvais faire récupérer les informations pertinentes que scénario. THX! – marbel

+1

@ MartínBel J'ai ajouté du code qui fonctionne avec RCurl pour obtenir des données de ce service. – MrFlick