Для содержимого HTML, полученного через R, интересно, какие (другие) варианты у меня есть относительно
сжатие файла (максимальная скорость сжатия/минимальный размер файла, время, требуемое для сжатия, имеет второстепенное значение) при сохранении содержимого на диск
наиболее эффективно сохраняя контент (любыми средствами, файловой системой ОС или СУБД)
Мои текущие результаты заключаются в том, что 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
html_2 <- gsub(">\\s*<", "", html)
удаляет >
и <
Вместо этого попробуйте:
html_2 <- gsub("(>)\\s*(<)", "\\1\\2",html)