Кэш read_html

Я пытался кешировать read_html/xml2 чтобы избежать затопления сервера во время разработки

library(digest)
library(xml2)
url = "https://en.wikipedia.org"
cache = digest(url)
if (file.exists(cache)) {
  cat("Reading from cache\n")
  html = readRDS(cache)
} else {
  #Sys.sleep(3)
  cat("Reading from web\n")
  html = xml2::read_html(url) 
  saveRDS(html, file = cache)
}
html

Это терпит неудачу, потому что в файле хранятся только внешние указатели, которые больше не действительны при повторном запуске. Та же проблема возникает при использовании memoise на read_html,

1 ответ

Решение

Вы всегда можете использовать as_list а также as_xml_document конвертировать туда и обратно.

library(digest)
library(xml2)
url = "https://en.wikipedia.org"
cache = digest(url)
if (file.exists(cache)) {
  cat("Reading from cache\n")
  html = as_xml_document(readRDS(cache))
} else {
  cat("Reading from web\n")
  html = read_html(url) 
  saveRDS(as_list(html), file = cache)
}
html

Или посмотрите в read_xml а также write_xml,

Другие вопросы по тегам