12 Stimmen

Wie isoliert man ein einzelnes Element aus einer gescrapten Webseite in R?

Ich möchte R verwenden, um diese Seite zu scrapen: ( http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html ) und andere, um die Torschützen und Zeiten zu erfahren.

Bis jetzt habe ich Folgendes:

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)

und das pagetree-Objekt enthält jetzt einen Zeiger auf meine geparste HTML-Datei (glaube ich). Der Teil, den ich will, ist:

<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>

Aber jetzt weiß ich nicht mehr, wie ich sie isolieren soll, und offen gesagt xpathSApply y xpathApply verwirren mich zu Tode!

Weiß jemand, wie man einen Befehl formuliert, um das Element aus der <div class="cont"> Tags?

2 Stimmen

Seien Sie vorsichtig, wenn Sie so etwas tun... In den meisten Fällen erlauben Organisationen wie die FIFA, die FIBA, die NBA usw. nicht die Verwendung ihrer Daten - einfach gesagt: ihre Daten sind ihr Eigentum! Das nächste Mal sollten Sie also einen Dummy-HTML-Code bereitstellen oder einfach auf eine harmlose Seite verweisen! =)

17voto

Shane Punkte 95376

Diese Fragen sind sehr hilfreich, wenn man sich mit Web Scraping und XML in R beschäftigt:

  1. Scraping von HTML-Tabellen in R-Datenrahmen mit dem XML-Paket
  2. Wie wandelt man XML-Daten in einen data.frame um?

In Bezug auf Ihr spezielles Beispiel bin ich mir zwar nicht sicher, wie die Ausgabe aussehen soll, aber so erhalten Sie die "erzielten Tore" als Zeichenvektor:

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)

En xpathSApply ermittelt alle Werte, die den angegebenen Kriterien entsprechen, und gibt sie als Vektor zurück. Beachten Sie, dass ich nach einem div mit class='cont' suche. Die Verwendung von Klassenwerten ist häufig ein guter Weg, um ein HTML-Dokument zu parsen, da sie gute Marker sind.

Sie können dies nach Belieben bereinigen:

> 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'"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X