下载前确定文件扩展名

时间:2018-06-18 18:16:22

标签: r web-scraping download

我正在做一个项目,需要进入一个brazillian等效的FTC数据库并下载一些文件(我稍后会处理),我想用R自动化。

我的问题是,在命名文件时,我必须告诉它文件扩展名,我不知道它会是什么(通常它将是扫描的pdf,但有时它将是一个html文件)。这是一个例子:

https://sei.cade.gov.br/sei/modulos/pesquisa/md_pesq_processo_exibir.php?0c62g277GvPsZDAxAO1tMiVcL9FcFMR5UuJ6rLqPEJuTUu08mg6wxLt0JzWxCor9mNcMYP8UAjTVP9dxRfPBcbZvmE_iaYkTbpPedZsRpa1llf9W8WXxdUJxor5q0IiE

我想要第一个和第十个文件。下载它们很容易:

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在下载时自动添加正确的文件扩展名?

1 个答案:

答案 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”用于网页。不确定可能有哪些其他类型的文件。对于给定的文件类型,没有“正确的”文件名,因此您需要自己做出决定。