2016-08-22 2 views
2

Ich versuche, Informationen von einer Webseite zu kratzen:rvest - Scrape Liste und Shop-Artikel separat

rm(list = ls()) 

library(rvest) 
library(XML) 
library(dplyr) 

utils::setInternet2(TRUE) 
options(download.file.method = "internal") 

url <-"http://www.home24.at/smood/premium-komfortmatratze-smood-180-x-200cm" 

pgsession <- html_session(url)    ## create session 
pgform <- html_form(pgsession)[[1]]  ## pull form from session 

pflege <- pgsession %>% 
       jump_to(url) %>% 
       read_html() %>% html_nodes(xpath="//*[@id='product-details']/div/div[2]/div[2]/div[2]/div[5]/ul") %>% 
       html_text() 

ich die Ergebnisse wie folgt aus zurück:

"Doppeltuchbezug bis 95°C waschbarWebstoffbezug kann in die Reinigung gegeben werden" 

Allerdings würde Ich mag an Holen Sie sich die Ergebnisse wie folgt zurück, so für jeden Listeneintrag getrennt:

"Doppeltuchbezug bis 95°C waschbar", "Webstoffbezug kann in die Reinigung gegeben werden" 

Irgendwelche Vorschläge, wie die zu trennen Strings und kratzen jedes Listenelement einzeln?

Antwort

3

Sie müssen nur einen XPath oder CSS-Selektor verwenden, der beide Elemente auswählt. Um einen geeigneten Selektor zu finden, überprüfen Sie den HTML-Code in einem Webbrowser. automatisch generierte sind selten optimal.

# pull page once and store in case you want to parse multiple elements 
page <- pgsession %>% jump_to(url) %>% read_html() 

page %>% html_nodes(xpath = '//*[@data-reactid="350"]/li') %>% html_text() 

## [1] "Doppeltuchbezug bis 95°C waschbar"     
## [2] "Webstoffbezug kann in die Reinigung gegeben werden"