Подгрузим пакеты
# install.packages(с('rvest', 'dplyr', 'ggplot2', 'tibble', 'stringr'))
library(rvest)
library(dplyr)
library(ggplot2)
library(tibble)
library(stringr)
Функция, которая забирает информацию с одной страницы на сайте.
function(url){
make_df_from_parse <-
# подгружаем контент с сайта
read_html(url)
books <-
# здесь лежит ВЕСЬ контент по книгам
books %>% html_nodes(xpath='//article[@class="product_pod"]')
res <-
# достали из контента названия книг
res %>%
titles <- html_nodes(xpath='//h3//a') %>%
html_attr(name = 'title')
# достали из контента цены книг
res %>%
prices <- html_nodes(xpath='//p[@class="price_color"]') %>%
html_text() %>%
str_replace('£', '') %>%
as.numeric()
# достали информацию о том, находится ли книга в наличии, по каждой книге
res %>%
stocks <- html_nodes(xpath='//p[@class="instock availability"]') %>%
html_text() %>%
str_extract_all('\\w+ \\w+') %>%
unlist()
# достали ссылки на каждую книгу
res %>% html_nodes(xpath='//h3//a') %>% html_attr(name = 'href')
hrefs <-
# достали уникальный код книги (upc)
# чтобы его получить, нужно перейти по ссылке конкретной книги на сайте
# сделать так для каждой книги на сайте
c()
upc <-
for(i in 1:length(hrefs)){
hrefs[i]
cur_href <- paste0('http://books.toscrape.com/catalogue/', cur_href)
cur_url <- read_html(cur_url)
info <- append(upc, info %>% html_nodes(xpath='//tr[1]//td') %>% html_text())
upc <-Sys.sleep(1)
}
# добавили все в табличку
tibble('title' = titles, 'price' = prices, 'stock' = stocks, 'upc' = upc)
df <-
return(df)
}
Получим ссылки всех страниц, по которым будем ходить.
paste0('http://books.toscrape.com/catalogue/page-',1:50,'.html') links <-
Соберем информацию по первой страничке.
make_df_from_parse(links[1]) df <-
Соберем по всем остальным
for(i in 2:length(links)){
links[i]
link <- df %>% union(make_df_from_parse(link))
df <-Sys.sleep(1)
}