2017-01-23 17 views
1

Ich beschäftige mich und spiele mit "rvest" herum. Die Daten mit "read_html" zu bekommen ist in Ordnung.webscraping: Tags manuell ersetzen

library(rvest) 
# suppressMessages(library(dplyr)) 
library(stringr) 
library(XML) 

# get house data 
houseurl <- "http://boekhoff.de/immobilien/gepflegtes-zweifamilienhaus-in-ellwuerden/" 
house <- read_html(houseurl) 
house 

Ich habe einige Probleme bei der Verarbeitung der Daten. Meine Probleme sind in der Quelle kommentiert.

## eleminating <br>-tags in address 
# using the following commands causes error using "html_nodes" 
str_extract_all(house,"<br>") ## show all linebreaks 
# replacing <br> in whitespace " ", 
house <- str_replace_all(house,"<br>", " ") 

jetzt lesen Details, aber es scheint, die nicht

funktioniert
houseattribut <- house %>% 
html_nodes(css = "div.col-2 li p.data-left") %>% 
html_text(trim=TRUE) 
# shows "Error in UseMethod("xml_find_all") : ... " 
# but all attributes are shown on screen 
houseattribut 

Ohne den „br“ ersetzt -Tags seine Arbeits manuell, aber die „html_text“ verschärft die Saiten zusammen

housedetails <- house %>% 
html_nodes(css = "div.col-2 li p.data-right") %>% 
html_text() 
housedetails 
# the same error shows "Error in UseMethod("xml_find_all") : ... " 
# but all details are shown on screen 

housedetails[4] 
# in the source there is: "Ellwürder Straße 17<br>26954 Nordenham" 
# at <br>-tag should be a whitespace 

Irgendwelche Hinweise, was ich falsch mache?

Antwort

0

Das Problem ist, dass, wenn Sie read_html verwenden, house ein xml_document ist, nachdem Sie str_replace_all verwenden es wurde eine chr, so, wenn Sie Knoten versuchen Sie es erneut zu filtern, es ist nicht mehr ein xml_document und es gibt Ihnen den Fehler.

Sie müssen es wieder in xml_document konvertieren oder wenden Sie den Knoten für Knoten ersetzen.

So etwas:

house <- read_html(str_replace_all(house,"<br>", " ")) 

Voll Code:

library(rvest) 
#> Loading required package: xml2 
library(stringr) 

houseurl <- "http://boekhoff.de/immobilien/gepflegtes-zweifamilienhaus-in-ellwuerden/" 
house <- read_html(houseurl) 

house <- read_html(str_replace_all(house,"<br>", " ")) 

housedetails <- house %>% 
    html_nodes(css = "div.col-2 li p.data-right") %>% 
    html_text() 

housedetails[4] 
#> [1] "Ellwürder Straße 17 26954 Nordenham" 
+0

Vielen Dank, das ist, was ich suche. – wattnwurm