2016-10-22 5 views
0

Ich möchte einige Auto-Daten von autotrader.de kratzen. Wenn Sie auf dieser Website suchen, enthält jede Seite Informationen für 12 Autos. Ich kratze separat den Preis und das Modell, das mir 2 Vektoren von 12 Elementen gibt (mit rvest). Allerdings kann ich Meilen, Alter usw. nicht getrennt voneinander abschaben, da sie sich in einer Linie mit anderen Variablen befinden und ihre Position für jedes Auto sich ändern kann, je nachdem, wie viele Variablen der Verkäufer enthält. Wenn Sie sich das beigefügte Bild ansehen, wird mir das CSS für das für Toyota verwendete Zulassungsjahr CAT C für den Ford KA geben und nicht das Jahr, da diese Variable an zweiter Stelle für dieses Auto steht. Also muss ich das CSS für die gesamte Zeile verwenden, um die Informationen zu erfassen.Ungleiche Anzahl von Elementen beim webscrapping

enter image description here

Ich beschloss, die gesamte Linie zu kratzen (der resultierende Vektor info genannt). Dieser Ansatz liefert mir jedoch einen Vektor von 80 Elementen (für jede Variable wie Jahr, Meilen usw.). Das Problem ist, dass ich dem Modell, dem Preis und dem Rest von Informationen in einem Datenrahmen beitreten möchte, und ich kann das nicht tun, da die info mehr Elemente als die ersten zwei Vektoren hat.

Der Code, den ich verwendet:

URL <- "http://www.autotrader.co.uk/car-search?sort=price-asc&radius=1500&postcode=np198jj&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New&page=" 
link <-read_html(URL) 
price <- html_nodes(link, ".search-result__price") %>% 
    html_text() 
info <- html_nodes(link, ".search-result__attributes li") %>% 
     html_text() 

Mit xpath für Informationen gibt gleiche 80 + Elemente. Ich habe auch versucht, für jedes Auto in info, die Elemente zu concancanate, war aber nicht erfolgreich:

str_replace_all(info, collapse = "---") 

Also meine Frage ist, wie ich die Informationen über das Jahr kratzen kann, Meilen usw., so dass diese alle ein Element für jeweils Auto. Alternativ gibt es eine Möglichkeit, das Jahr, Meilen und den Rest der Variablen getrennt zu targeten.

Antwort

0

die URL Feste und ließ die li auf Attribute:

library(rvest) 
URL <- "http://www.autotrader.co.uk/car-search?sort=price-asc&radius=1500&postcode=np198jj&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New" 
> link <- read_html(URL) 
> price <- html_nodes(link, ".search-result__price") %>% 
> html_text() 
> info <- html_nodes(link, ".search-result__attributes") %>% 
> html_text() 
> identical(length(price), length(info)) 
[1] TRUE 
Verwandte Themen