2017-01-05 1 views
2

J'essaye actuellement de gratter les données de biodiversité d'un site Web spécifique (http://www.faunaeur.org/?no_redirect=1). J'ai réussi à obtenir des résultats, mais pas aussi automatisée que je l'espérais ... La première partie est fait, ce qui est la navigation sur le site:Rselenium - Comment faire pour gratter les données d'une page Web avec aucun ID ou des noms d'aucune sorte

Mise en place Rselenium:

library(RSelenium) 
download.file("https://github.com/mozilla/geckodriver/releases/download/v0.11.1/geckodriver-v0.11.1-win64.zip",destfile="./gecko.zip") 
unzip("./gecko.zip",exdir=".",overwrite=T) 
checkForServer(update=T) 
selfserv = startServer() 
mybrowser1 = remoteDriver(browserName="firefox",extraCapabilities = list(marionette = TRUE)) 
mybrowser1$open() 

Puis commencer ma la navigation (ce serait un exemple pour les îles Baléares):

mybrowser1$navigate("http://www.faunaeur.org/distribution.php?current_form=species_list") 
mybrowser1$findElement(using="xpath","//select[@name='taxon_rank']/option[@value='7']")$clickElement() # Class 
mybrowser1$findElement(using="xpath","//input[@name='taxon_name']")$sendKeysToElement(list('Oligochaeta')) # Oligochète 
mybrowser1$findElement(using="xpath","//select[@name='region']/option[@value='15']")$clickElement() 
mybrowser1$findElement(using="xpath","//input[@name='include_doubtful_presence']")$clickElement() 
mybrowser1$findElement(using="xpath","//input[@name='submit2']")$clickElement() 

de ce point, je peux télécharger le fichier xls des 20 sous-espèces en utilisant:

mybrowser1$findElement(using = "xpath", "//a[@href='JavaScript:document.export_species_list.submit()']")$clickElement() 

Mais ce n'est pas ce que je veux, je ne veux pas utiliser un "clic". Est-il possible de télécharger le fichier à partir de ce lien JavaScript directement dans mon environnement R ou de rayer le tableau des 20 sous-espèces directement à partir du code source de la page Web en utilisant Rselenium? J'ai essayé ces deux solutions mais c'est une impasse ... Le plus gros problème est que la page est une page temporaire ou 'page de résultats' et il semble que je ne trouve pas de @value, @id, @name ou @class correspondant à la table dont j'ai besoin.

Un indice sur une solution qui impliquait une manière automatisée de le faire via R? J'en ai besoin sous cette forme car le script doit être exécuté ensuite par des personnes qui ont besoin de créer eux-mêmes les résultats. Merci d'avance !

+0

Oui, vous devez définir options firefox appropriées voir http://stackoverflow.com/questions/36574012/rselenium-setting-makefirefoxprofile-for-mac-os-x-to-download-files-without-ask. Le fichier xls sera alors téléchargé dans le répertoire que vous nommez – jdharrison

+0

J'ai effectivement vérifié cela déjà. Je me demandais juste s'il y avait une autre solution efficace ... Puisque vous êtes le développeur de Rselenium, jdharrison, je ne pense pas que j'obtiendrai de meilleures réponses! Merci –

Répondre

1

Si vous voulez juste la table qui est affichée sur le site, cela peut se faire sans Rselenium via httr comme suit:

require(rvest) 
require(httr) 
res <- POST("http://www.faunaeur.org/species_list.php", 
      encode = "form", 
      body = list(selected_regions="15", 
         show_what="species list", 
         referring_page="distribution", 
         taxon_rank="7", 
         taxon_name="Oligochaeta", 
         region="15", 
         include_doubtful_presence="yes", 
         submit2="Display Species", 
         show_what="species list", 
         species_or_higher_taxa="species")) 
doc <- res %>% read_html 
dat <- doc %>% html_table(fill=TRUE,) %>% .[[9]] 
colnames(dat) <- dat[1,] 
dat <- dat[-1, ] 

Ce qui vous donne:

  Family      Species/subspecies 
2 Acanthodrilidae  Microscolex dubius (Fletscher 1887) 
3 Enchytraeidae  Enchytraeus buchholzi Vejdovsky 1878 
4 Enchytraeidae  Fridericia berninii Dozsa-Farkas 1988 
5 Enchytraeidae   Fridericia caprensis Bell 1947 
... 
21  Naididae   Aulophorus furcatus (Oken 1815) 
+0

C'est génial! Mon erreur était que je devais me concentrer sur le paquet Rselenium, je ne savais pas que cela pouvait se faire via rvest & httr ... Merci FlooO! –