- Mitglied seit
- 19.05.2003
- Beiträge
- 19.993
- Reaktionen
- 849
Vielleicht kann mir hier jemand helfen. Ich möchte gerne von der Seite Rome2Rio die Informationen über den Preis und die Entfernung verschiedener Reisen extrahieren. Wenn möglich mit R, weil ich nichts anderes kann und sonst auch nichts anderes nutzen kann/darf.
Ich bin an sich so weit dass ich z.B. die Strecke Köln-Berlin auslesen kann, in dem ich den kompletten HTML Code von https://www.rome2rio.com/de/map/Koeln/Berlin extrahiere.
in R mache ich das z.B. so:
das Beste was ich zur Zeit hinbekomme ist mit dem Befehl readHTMLtable einige Elemente wie Dauer und Kosten rauszulesen, die wohl überall so struktuiert vorkommen, dass er das direkt ausliest.
Dann müsste ich noch gucken, dass ich nur die Reihe mit dem Zug behalte. Damit wäre ich eigentlich zufrieden, wenn mir nicht die Entfernung der Reiseoption fehlen würde.
Ich hatte gehofft, dass ich das ganze besser parsen könnte indem ich mir die Root/Children Beziehung anschaue, aber das läuft nur mäßig. Die heißen alle irgendwie $meta, $schript, $link oder so.
Sonst hilft mir wohl eher xpathApply um alle Elemente die mit "li" anfangen und enden zu extrahieren.
Dann hab ich aber auch noch ein recht hässliches Objekt mit 84 Werten über, bei dem ich umständlich extrahieren muss, was ich eigentlich möchte. Vor allem checke ich nicht, wieso ich nirgends die Entfernung vom Zug finde, obwohl das auf der Seite zu sehen ist...
Ich bin an sich so weit dass ich z.B. die Strecke Köln-Berlin auslesen kann, in dem ich den kompletten HTML Code von https://www.rome2rio.com/de/map/Koeln/Berlin extrahiere.
in R mache ich das z.B. so:
input<-"https://www.rome2rio.com/de/map/Koeln/Berlin"
wp<-readLines(input,encoding ="UTF-8")
wp<-readLines(input,encoding ="UTF-8")
das Beste was ich zur Zeit hinbekomme ist mit dem Befehl readHTMLtable einige Elemente wie Dauer und Kosten rauszulesen, die wohl überall so struktuiert vorkommen, dass er das direkt ausliest.
wp.html<-readHTMLTable(wp)
df<-wp.html[[1]]
df$Kosten<-as.numeric(gsub("[^0-9]", "", df$Kosten))
df$Transportmittel<-stringr::str_replace_all(df$Transportmittel, c('ü' = 'ü', 'ï' = 'ie', 'ë' = 'ee', 'ä' = 'ae','ö' = 'ö',"ß"="ß"))
df
df<-wp.html[[1]]
df$Kosten<-as.numeric(gsub("[^0-9]", "", df$Kosten))
df$Transportmittel<-stringr::str_replace_all(df$Transportmittel, c('ü' = 'ü', 'ï' = 'ie', 'ë' = 'ee', 'ä' = 'ae','ö' = 'ö',"ß"="ß"))
df
Dann müsste ich noch gucken, dass ich nur die Reihe mit dem Zug behalte. Damit wäre ich eigentlich zufrieden, wenn mir nicht die Entfernung der Reiseoption fehlen würde.
Ich hatte gehofft, dass ich das ganze besser parsen könnte indem ich mir die Root/Children Beziehung anschaue, aber das läuft nur mäßig. Die heißen alle irgendwie $meta, $schript, $link oder so.
wp<-readLines(input,encoding ="UTF-8")
wp.Parse<-htmlParse(wp,encoding ="UTF-8")
root<-xmlRoot(wp.Parse)
xmlSApply(root,names)
children<-xmlChildren(root)
sapply(children,names)
wp.Parse<-htmlParse(wp,encoding ="UTF-8")
root<-xmlRoot(wp.Parse)
xmlSApply(root,names)
children<-xmlChildren(root)
sapply(children,names)
Sonst hilft mir wohl eher xpathApply um alle Elemente die mit "li" anfangen und enden zu extrahieren.
values<-xpathApply(wp.Parse, "//li", xmlValue)
Dann hab ich aber auch noch ein recht hässliches Objekt mit 84 Werten über, bei dem ich umständlich extrahieren muss, was ich eigentlich möchte. Vor allem checke ich nicht, wieso ich nirgends die Entfernung vom Zug finde, obwohl das auf der Seite zu sehen ist...

