我正在做一个项目,需要进入一个brazillian等效的FTC数据库并下载一些文件(我稍后会处理),我想用R自动化。
我的问题是,在命名文件时,我必须告诉它文件扩展名,我不知道它会是什么(通常它将是扫描的pdf,但有时它将是一个html文件)。这是一个例子:
我想要第一个和第十个文件。下载它们很容易:
download.file("https://sei.cade.gov.br/sei/modulos/pesquisa/md_pesq_documento_consulta_externa.php?DZ2uWeaYicbuRZEFhBt-n3BfPLlu9u7akQAh8mpB9yPDzrBMElK1BGz7u3NcOFP7-Z5s9oDvQR1K4ELVR_nmNlPto_G3CRD_y2Hu6JLvHZVV2LDxnr4dccffqX3xlEao", destfile = 'C:/teste/teste1', mode = 'wb')
download.file("https://sei.cade.gov.br/sei/modulos/pesquisa/md_pesq_documento_consulta_externa.php?DZ2uWeaYicbuRZEFhBt-n3BfPLlu9u7akQAh8mpB9yPaFy5S3krC8lTKjlRbfodOIg2NArJmAFS5PyUEHL3hnJYr8VG9zLGdNts6K99Ht673e_ZPr2gr3Cw7r8zJqRiH", destfile = 'C:/teste/teste2', mode = 'wb')
问题是,我不知道哪一个是pdf文件,哪一个是html文件而没有手动尝试用另一个程序打开它们。有没有办法让R在下载时自动添加正确的文件扩展名?
答案 0 :(得分:1)
如果您使用httr
包,则可以获取内容类型标题,以帮助您确定文件的类型。您可以使用HEAD()
函数来获取文件的标题。例如,使用您的网址
urls <- c(
"https://sei.cade.gov.br/sei/modulos/pesquisa/md_pesq_documento_consulta_externa.php?DZ2uWeaYicbuRZEFhBt-n3BfPLlu9u7akQAh8mpB9yPDzrBMElK1BGz7u3NcOFP7-Z5s9oDvQR1K4ELVR_nmNlPto_G3CRD_y2Hu6JLvHZVV2LDxnr4dccffqX3xlEao",
"https://sei.cade.gov.br/sei/modulos/pesquisa/md_pesq_documento_consulta_externa.php?DZ2uWeaYicbuRZEFhBt-n3BfPLlu9u7akQAh8mpB9yPaFy5S3krC8lTKjlRbfodOIg2NArJmAFS5PyUEHL3hnJYr8VG9zLGdNts6K99Ht673e_ZPr2gr3Cw7r8zJqRiH"
)
您可以编写辅助函数
get_content_type <- function(x) {
unname(sapply(x, function(x) headers(HEAD(x))[["content-type"]]))
}
get_content_type(urls)
# [1] "application/pdf;" "text/html; charset=ISO-8859-1"
这些返回mime类型,但您可以使用“pdf”之类的内容来保存为PDF或“html”用于网页。不确定可能有哪些其他类型的文件。对于给定的文件类型,没有“正确的”文件名,因此您需要自己做出决定。