Ошибка в eval_tidy (xs [[j]], маска): объект ‘titles’ не найден

#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:

Две вещи:

  1. return должно быть внутри фигурных скобок в конце функции

      return(tibble(titles = titles, minutes = minutes, callories = callories))
    }
      
  2. Вы забыли обновить имя переменной таким образом, чтобы у вас

     html <- read_html(url)
      

    когда вам нужно

     html_page <- read_html(url)
      

Ответ №2:

Само по себе это не отвечает на вопрос @ Laila, но я столкнулся с

Ошибка в eval_tidy(xs[[j]], маска): объект » не найден

ошибка, когда я сделал что-то похожее на

 tibble(
  a = 1,
  b = ,
  c = NA
)
  

В общем, забыл ввести значение для столбца tibble. Но это довольно неинформативное сообщение об ошибке. Я оставляю это для будущего меня (и других) в качестве ссылки, поскольку сообщений, связанных с этой ошибкой, не так много.