-
Notifications
You must be signed in to change notification settings - Fork 3
/
bolo-de-cenoura
83 lines (65 loc) · 3.15 KB
/
bolo-de-cenoura
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#=================================================
# Como extrair uma informação de multiplos links
#=================================================
## PACOTES
library("rvest")
library("stringr")
library("purrr")
library("dplyr")
exemplo <- read_html("http://allrecipes.com.br/receita/2453/bolo-de-cenoura-com-cobertura-de-chocolate-i.aspx") %>%
html_nodes(".recipeIngredients h2+ ul") %>%
html_text() %>%
data.frame()
# Exemplo. Extrair os ingredientes de cada receita de
# bolo de cenoura, a partir do site "allrecipes"
#******************************************************
## LINK DA BUSCA POR BOLO DE CENOURA
# http://allrecipes.com.br/receitas/etiqueta-572/receitas-de-bolo-de-cenoura.aspx?page=2
## PASSO 1. Obter os links de cada página do resultado
#Primeiro é necessário verificar o que muda no link de uma pagian
# de resultado para outra. Nesse caso, só muda o númeoro no final do link
#Agora vamos descobrir o total de páginas do resultado
site <- "http://allrecipes.com.br/receitas/etiqueta-572/receitas-de-bolo-de-cenoura.aspx?page=2"
total_p <- c(1:6)
result_pages <- paste0("http://allrecipes.com.br/receitas/etiqueta-572/receitas-de-bolo-de-cenoura.aspx?page=", total_p)
result_pages
# PASSO 2. Obter os links de cada uma das receitas do site, contidas em cada
# uma das 6 páginas de resultado. Vou começar criando uma função para raspar o link
link_recipe <- function(x)
{
read_html(x) %>% html_nodes(".col-sm-7 a") %>% html_attr("href") %>% data.frame()
}
#Uma vez criada a função, vou usar o "map_df" para aplicar aquela função
# em cada um das páginas de resultado. O resultado final serão os links das receitas
link_receitas <- map_df(result_pages, link_recipe)
# PASSO 3. Obter os ingredientes de cada uma das receitas
#Antes criar uma função para raspar os ingredientes
get_ingredients <- function(x)
{
read_html(x) %>%
html_nodes(".recipeIngredients h2+ ul") %>%
html_text() %>%
str_to_lower() %>%
data.frame()
}
#COm a função, vou usar o "map_df" para aplicar a cada uma das receitas, a partir dos
# dos respectivos links
ingredientes <-map_df (link_receitas$., get_ingredients)
##Passo 4. Juntar num mesmo banco, os ingredientes, os links das receitas e os nomes das receitas
# De tudo isso, a única informação que não temos são os nomes. Vamos a eles
dados <- bind_cols(ingredientes, link_receitas)
dados <- rename(dados, ingredientes = ., links = ".1")
#Obter o nome da receita e incluí-lo no banco. (Extrair o nome pelo link)
n1 <- dados$links %>% str_split_fixed ("/", 6)
n2 <- n1 [, 6]
n3 <- n2 %>% str_replace_all("-", " ")
str_length(".aspx?o_is=LV")
dados$nomes <- n3 %>% str_sub(1, (str_length(n3)-13))
## Exercícios com o banco
#receitas sem trigo
dados %>% filter(str_detect(ingredientes, "trigo") )
sem_trigo <- dados %>% filter( str_detect(ingredientes, "trigo")==FALSE)
sem_açúcar <- dados %>% filter( str_detect(ingredientes, "açúcar")==FALSE)
sem_ovos <- dados %>% filter( str_detect(ingredientes, "ovo")==FALSE)
git remote add origin https://github.com/SauloSaid/Publico.git
git push -u origin master