#html #r #web-scraping #rvest
#HTML #r #очистка веб-страниц #rvest
Вопрос:
Когда я пытаюсь выполнить этот код, я получаю сообщение об ошибке. Я хочу очистить данные с нескольких страниц. Но когда я пытаюсь использовать приведенный ниже скрипт, я получаю сообщение об ошибке, в котором говорится:
Ошибка в eval_tidy (xs [[j]], маска): объект ‘titles’ не найден
library(tidyverse)
library(rvest)
# function to scrape all elements also missing elements
scrape_css <- function(css, group, html_page) {
txt <- html_page %>%
html_nodes(group) %>%
lapply(
. %>%
html_nodes(css) %>%
html_text() %>%
ifelse(identical(., character(0)), NA, .)
) %>%
unlist()
return(txt)
}
# Get all elements from 1 page
get_one_page <- function(url) {
html <- read_html(url)
titles <- scrape_css(
".recipe-card_title__1oIb-",
".recipe-grid-lane_recipeCardColumn__2ILMo",
html_page
)
minutes <- scrape_css(
".recipe-card-properties_property__2tGuH:nth-child(1)",
".recipe-grid-lane_recipeCardColumn__2ILMo",
html_page
)
callories <- scrape_css(
".recipe-card-properties_property__2tGuH:nth-child(2)",
".recipe-grid-lane_recipeCardColumn__2ILMo",
html_page
)
}
return(tibble(titles = titles, minutes = minutes, callories = callories))
url <- ("https://www.ah.nl/allerhande/recepten/R-L1473207825981/suikerbewust")
appie <- get_one_page(url)
Ответ №1:
Две вещи:
-
return
должно быть внутри фигурных скобок в конце функцииreturn(tibble(titles = titles, minutes = minutes, callories = callories)) }
-
Вы забыли обновить имя переменной таким образом, чтобы у вас
html <- read_html(url)
когда вам нужно
html_page <- read_html(url)
Ответ №2:
Само по себе это не отвечает на вопрос @ Laila, но я столкнулся с
Ошибка в eval_tidy(xs[[j]], маска): объект » не найден
ошибка, когда я сделал что-то похожее на
tibble(
a = 1,
b = ,
c = NA
)
В общем, забыл ввести значение для столбца tibble. Но это довольно неинформативное сообщение об ошибке. Я оставляю это для будущего меня (и других) в качестве ссылки, поскольку сообщений, связанных с этой ошибкой, не так много.