2016-04-15 7 views
5

Ich versuche, Daten über invasive Pflanzenspezies Standorte aus dem CABI invasive species compendium mit dem RVP-Paket zu extrahieren.Scrapping von Daten aus einer HTML-Tabelle

Nachdem ich ein paar Tutorials angeschaut habe, habe ich herausgefunden, dass ich in der Lage sein sollte, Daten aus Tabellen recht einfach zu scrappen. Ich laufe jedoch immer wieder in Schwierigkeiten.

Sagen wir, ich möchte Standortdaten für die Art Brassica tournefortii. Ich sollte in der Lage sein, diesen Code zu verwenden, der die Techniken outlined here verwendet, um Details der Orte zu erhalten, an denen die Spezies aufgezeichnet wurde.

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

jedoch diesen Code ausgeführt wird erhalte ich die Fehler

Error: No matches 

Ich bin völlig neu Screen Scraping. Mache ich etwas schrecklich falsch?

Antwort

8

Zuerst wünschte ich, ich könnte Sie mehr auffrischen. Endlich eine Frage, die nicht $ SPORTSBALL oder $ MONEY betrifft! :-)

Diese Seite ist böse. Es verwendet eingebettete Namespaces, die behandelt werden müssen, was auch die Verwendung des xml2 Pakets bedeutet:

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

Fantastisch, danke! Das sollte mir helfen, einen guten Anfang zu machen, um Daten von dieser Seite zu bekommen. Wie erhalten Sie die Informationen im xpath-Teil der xml_find_all-Funktion? –

+1

Ich habe es aus dem Pfad, der in den Entwicklertools angezeigt wird, gemappt, nachdem ich mit der rechten Maustaste geklickt und in dieser Tabelle Element prüfen ausgewählt habe. Ich könnte es vielleicht mit CSS wiederholen, aber in manchen Situationen kann es hilfreich sein, einen kleinen XPath zu haben. – hrbrmstr