webscrapping Fehlermeldung

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
LeaRn
Beiträge: 17
Registriert: Sa Mär 14, 2020 12:25 am

webscrapping Fehlermeldung

Beitrag von LeaRn »

Hallo
Ich übe ein bisschen mit rvest umzugehen und bin auf folgendes Problem gestossen:

Code: Alles auswählen

library(rvest)

page <- read_html("https://www.quoka.de/alle-rubriken/kleinanzeigen.html")
    
quoka.df <- data.frame(
                      Titel = html_text(html_nodes(page, ".t-nowrap-overflow")),
                      Preis = html_text(html_nodes(page, ".price")),
                      PLZ = html_text(html_nodes(page, ".postal-code")),
                      Beschreibung = html_text(html_nodes(page, ".description")),
                      Land = html_text(html_nodes(page, ".country")),
                      Ort = html_text(html_nodes(page, ".locality"))
                     )
                     
view(quoka.df)
Ich erhalte folgende Fehlermeldung:
Fehler in data.frame(Titel = html_text(html_nodes(page, ".t-nowrap-overflow")), :
Argumente implizieren unterschiedliche Anzahl Zeilen: 28, 31
(Manchmal stehen da auch andere Werte z.B.: 28,31, 27)

Beinhalten nicht alle Class-Variablen gleich viele Werte?
Wie kann ich dies beheben?
Gruss
LeaRn
Zuletzt geändert von LeaRn am Fr Mai 01, 2020 11:18 am, insgesamt 1-mal geändert.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: webscrapping Fehlermeldung

Beitrag von EDi »

Beinhalten nicht alle Class-Variablen gleich viele Werte?
Anscheinend nicht.
Wie kann ich dies beheben?
Ich würde einzeln extrahieren und fehlende vielleicht mit NA auffüllen und dann erst in einen data.frame zusammenpacken.

Es könnte aber auch sinnvoll sein, sich die Ergebnisse anzuschauen vielleicht ist da etwas für dich unerwartetes...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
LeaRn
Beiträge: 17
Registriert: Sa Mär 14, 2020 12:25 am

Re: webscrapping Fehlermeldung

Beitrag von LeaRn »

Besten Dank für den Tipp! Hat mich auf die richtige Spur gebracht.
Das Problem war, dass die class von "Preis" und "Titel" auch die Preise und Titel von den Werbeangeboten beinhaltete. Diese konnten aber einfach gelöscht werden.

Hier meine Lösung:

Code: Alles auswählen

library(rvest)
library(foreach)
library(tidyr)

data <- foreach(i = 2:10, .combine = "rbind") %do% { #fügt 9 gescrapte pages von quoka.de zusammen
  
      url_split <- paste0("https://www.quoka.de/kleinanzeigen/cat_0_ct_0_page_", i)
      url <- paste0(url_split, ".html")
      
      page <- read_html(url)
          
      Titel <- html_text(html_nodes(page, ".t-nowrap-overflow"))
      Preis <- html_text(html_nodes(page, ".price"))
      PLZ <- html_text(html_nodes(page, ".postal-code"))
      Beschreibung <- html_text(html_nodes(page, ".description"))
      Land <- html_text(html_nodes(page, ".country"))
      Ort <- html_text(html_nodes(page, ".locality"))
      
      Preis[grepl("\n", Preis)] <- NA #\n sind wohl die Werbeinserate, die in denselben class gespeichert sind
      
      Beschr <- data.frame(
        Preis = Preis,
        Beschreibung = Beschreibung
      )
      
      Beschr <- drop_na(Beschr)
      
      demograph <- data.frame(
        Titel = Titel,
        PLZ = PLZ,
        Ort = Ort,
        Land = Land
      )
      quoka_frame <- cbind(Beschr, demograph)
}

colOrder <- c("Titel", "Beschreibung", "Preis", "PLZ", "Ort", "Land")
data <- data[,colOrder]

view(data)
PS.: Der Code ist eher ein Herumprobieren gewesen, als eine saubere Lösung. Verbesserungsvorschläge sind aber willkommen.
Antworten