Сжатие файлов для и хранение содержимого HTML

0

Для содержимого HTML, полученного через R, интересно, какие (другие) варианты у меня есть относительно

  1. сжатие файла (максимальная скорость сжатия/минимальный размер файла, время, требуемое для сжатия, имеет второстепенное значение) при сохранении содержимого на диск

  2. наиболее эффективно сохраняя контент (любыми средствами, файловой системой ОС или СУБД)

Мои текущие результаты заключаются в том, что gzfile предлагает лучшую степень сжатия в R. Могу ли я сделать лучше? Например, я попытался избавиться от ненужного пространства в коде HTML перед сохранением, но похоже, что gzfile уже позаботится об этом, поскольку в итоге я не сравниваю меньшие размеры файлов.

Вопрос расширенного любопытства:

Как поисковые системы справляются с этой проблемой? Или они выбрасывают код, как только он индексируется, и, следовательно, что-то вроде этого не имеет для них значения?


иллюстрация

Получение примера кода HTML:

url_current <- "http://cran.at.r-project.org/web/packages/available_packages_by_name.html"
html <- readLines(url(url_current))

Сохранение на диск:

path_txt        <- file.path(tempdir(), "test.txt")
path_gz         <- gsub("\\.txt$", ".gz", path_txt)
path_rdata      <- gsub("\\.txt$", ".rdata", path_txt)
path_rdata_2    <- gsub("\\.txt$", "_raw.rdata", path_txt)

write(html, file=path_txt)
write(html, file=gzfile(path_gz, "w"))
save(html, file=path_rdata)

html_raw <- charToRaw(paste(html, collapse="\n"))
save(html_raw, file=path_rdata_2)

Попытка удалить лишние пробелы:

html_2  <- gsub("(>)\\s*(<)", "\\1\\2",html)
path_gz_2   <- gsub("\\.txt$", "_2.gz", path_txt)
write(html_2, gzfile(path_gz_2, "w"))
html_2  <- gsub("\\n", "", html_2)
path_gz_3   <- gsub("\\.txt$", "_3.gz", path_txt)
write(html_2, gzfile(path_gz_3, "w"))

Результирующие размеры файлов:

files   <- list.files(dirname(path_txt), full.names=TRUE)
fsizes  <- file.info(files)$size
names(fsizes) <- sapply(files, basename)

> fsizes
       test.gz     test.rdata       test.txt      test_2.gz      test_3.gz 
        164529         183818         849647         164529         164529 
test_raw.rdata 
        164608 

Проверка правильности обработанного HTML-кода:

require("XML")
html_parsed <- htmlParse(html)

> xpathSApply(html_parsed, "//a[. = 'devtools']", xmlAttrs)
                                    href 
"../../web/packages/devtools/index.html" 
## >> Valid HTML

html_2_parsed <- htmlParse(readLines(gzfile(path_gz_2)))

> xpathSApply(html_2_parsed, "//a[. = 'devtools']", xmlAttrs)
                                    href 
"../../web/packages/devtools/index.html" 
## >> Valid HTML

html_3_parsed <- htmlParse(readLines(gzfile(path_gz_3)))

> xpathSApply(html_3_parsed, "//a[. = 'devtools']", xmlAttrs)
                                    href 
"../../web/packages/devtools/index.html" 
## >> Valid HTML
Теги:
compression
gz

1 ответ

1
html_2 <- gsub(">\\s*<", "", html)

удаляет > и <

Вместо этого попробуйте:

html_2 <- gsub("(>)\\s*(<)", "\\1\\2",html)
  • 0
    должно быть 2 обратной косой черты html_2 <- gsub ("(>) \\ s * (<)", "\\ 1 \\ 2", html)
  • 0
    Правильно! Дух глупая ошибка. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню