2010-06-08 5 views
11

Chcę użyć R do zeskrobania tej strony: (http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html) i innych, aby uzyskać strzelców i czasy.Jak wyizolować pojedynczy element ze zeskrobanej strony w R

Jak dotąd, jest to, co mam:

require(RCurl) 
require(XML) 

theURL <-"http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html" 
webpage <- getURL(theURL, header=FALSE, verbose=TRUE) 
webpagecont <- readLines(tc <- textConnection(webpage)); close(tc) 

pagetree <- htmlTreeParse(webpagecont, error=function(...){}, useInternalNodes = TRUE) 

a obiekt pagetree zawiera teraz wskaźnik do mojego analizowany html (chyba). Część chcę jest:

<div class="cont")<ul> 
<div class="bold medium">Goals scored</div> 
     <li>Philipp LAHM (GER) 6', </li> 
     <li>Paulo WANCHOPE (CRC) 12', </li> 
     <li>Miroslav KLOSE (GER) 17', </li> 
     <li>Miroslav KLOSE (GER) 61', </li> 
     <li>Paulo WANCHOPE (CRC) 73', </li> 
     <li>Torsten FRINGS (GER) 87'</li> 
</ul></div> 

ale teraz jestem zagubiony, jak je izolować, i szczerze xpathSApply i xpathApply mylić beejeebies ze mnie!

Czy ktoś wie, jak sformułować polecenie wyssania elementu z tagów <div class="cont">?

+2

Bądź ostrożny kiedy robisz takie rzeczy ... W większości przypadków organizacje jak FIFA czy FIBA, NBA itd nie pozwalają na wykorzystanie ich danych - mówiąc prosto: ich dane są ich własnością! Następnym razem podaj jakiś fałszywy kod HTML lub po prostu wskaż jakąś nieszkodliwą stronę! =) – aL3xa

Odpowiedz

16

te pytania są bardzo pomocne w kontaktach z skrobanie internetowych i XML w R:

  1. Scraping html tables into R data frames using the XML package
  2. How to transform XML data into a data.frame?

W odniesieniu do konkretnego przykładu, a nie jestem pewien, co chcesz, aby wyglądał tak, aby uzyskać "zdobyte bramki" jako wektor znaków:

theURL <-"http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html" 
fifa.doc <- htmlParse(theURL) 
fifa <- xpathSApply(fifa.doc, "//*/div[@class='cont']", xmlValue) 
goals.scored <- grep("Goals scored", fifa, value=TRUE) 

Funkcja pobiera wszystkie wartości pasujące do podanych kryteriów i zwraca je jako wektor. Zauważ, jak szukam div z class = 'cont'. Używanie wartości klas jest często dobrym sposobem na przeanalizowanie dokumentu HTML, ponieważ są one dobrymi znacznikami.

Można to oczyścić jednak chcesz:

> gsub("Goals scored", "", strsplit(goals.scored, ", ")[[1]]) 
[1] "Philipp LAHM (GER) 6'" "Paulo WANCHOPE (CRC) 12'" "Miroslav KLOSE (GER) 17'" "Miroslav KLOSE (GER) 61'" "Paulo WANCHOPE (CRC) 73'" 
[6] "Torsten FRINGS (GER) 87'" 
+1

Całkiem schludnie, szukałem czegoś takiego jak dawno temu, ale skończyło się w Pythonie! Teraz mogę uruchomić skrypt Littlera i wypełnić zestaw danych! Chłodny! – aL3xa

Powiązane problemy