2016-04-15 21 views
5

Sto cercando di estrarre i dati su posizioni di specie di piante invasive dal CABI invasive species compendium utilizzando il pacchetto rvest.Scraping dati da una tabella html

Dopo aver esaminato alcuni tutorial, ho capito che dovrei essere in grado di raschiare facilmente i dati dalle tabelle. Tuttavia, continuo a incontrare difficoltà.

Diciamo che desidero dati di posizione per la specie Brassica tournefortii. Dovrei essere in grado di utilizzare questo codice, che utilizza le tecniche outlined here per ottenere dettagli sui luoghi in cui è stata registrata la specie.

library(rvest) 
isc<-read_html("http://www.cabi.org/isc/datasheet/50069") 
isc %>% 
html_node("#toDistributionTable td:nth-child(1)") %>% 
html_text() 

Tuttavia, l'esecuzione di questo codice ottengo l'errore

Error: No matches 

Sono completamente nuovo per web scraping. Sto facendo qualcosa di terribilmente sbagliato?

risposta

8

In primo luogo, vorrei poterti invogliare di più. Finalmente una domanda di scraping che non è $ SPORTSBALL o $ MONEY correlati! :-)

Quel sito è malvagio. Utilizza spazi dei nomi incorporati che devono essere gestiti, il che significa anche utilizzare il pacchetto xml2:

library(rvest) 
library(xml2) 

isc <- read_html("http://www.cabi.org/isc/datasheet/50069") 

ns <- xml_ns(isc) 

xml_text(xml_find_all(isc, xpath="//div[@id='toDistributionTable']/table/tbody/tr/td[1]", ns)) 

## [1] "ASIA"       "Azerbaijan"      
## [3] "Bhutan"       "China"       
## [5] "-Tibet"       "India"       
## [7] "-Delhi"       "-Indian Punjab"     
## [9] "-Rajasthan"      "-Uttar Pradesh"     
## [11] "Iran"       "Iraq"       
## [13] "Israel"       "Jordan"       
## [15] "Kuwait"       "Lebanon"      
## [17] "Oman"       "Pakistan"      
## [19] "Qatar"       "Saudi Arabia"     
## [21] "Syria"       "Turkey"       
## [23] "Turkmenistan"     "United Arab Emirates"   
## [25] "Uzbekistan"      "Yemen"       
## [27] "AFRICA"       "Algeria"      
## [29] "Egypt"       "Libya"       
## [31] "Morocco"      "South Africa"     
## [33] "Tunisia"      "NORTH AMERICA"     
## [35] "Mexico"       "USA"       
## [37] "-Arizona"      "-California"     
## [39] "-Nevada"      "-New Mexico"     
## [41] "-Texas"       "-Utah"       
## [43] "SOUTH AMERICA"     "Chile"       
## [45] "EUROPE"       "Belgium"      
## [47] "Cyprus"       "Denmark"      
## [49] "France"       "Greece"       
## [51] "Ireland"      "Italy"       
## [53] "Spain"       "Sweden"       
## [55] "UK"        "-England and Wales"    
## [57] "-Scotland"      "OCEANIA"      
## [59] "Australia"      "-Australian Northern Territory" 
## [61] "-New South Wales"    "-Queensland"     
## [63] "-South Australia"    "-Tasmania"      
## [65] "-Victoria"      "-Western Australia"    
## [67] "New Zealand" 
+0

Fantastico, grazie! Questo dovrebbe aiutarmi a fare un buon inizio nell'ottenere dati da quel sito. Come fai a ottenere le informazioni nella parte xpath della funzione xml_find_all? –

+1

L'ho mappato dal percorso mostrato in Strumenti per sviluppatori dopo aver fatto clic con il pulsante destro del mouse e selezionato Ispeziona elemento su tale tabella. Potrei riuscire a rifarlo con i CSS, ma sapere un po 'di XPath può aiutare in alcune situazioni. – hrbrmstr

Problemi correlati