【问题标题】:Figuring out file extension before downloading在下载之前弄清楚文件扩展名
【发布时间】:2018-06-18 18:16:21
【问题描述】:

我正在做一个项目,该项目需要进入与 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 在下载时自动添加正确的文件扩展名?

【问题讨论】:

    标签: r web-scraping download


    【解决方案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 类型,但您可以使用 grep 查找诸如“pdf”之类的内容以保存为 PDF 或用于网页的“html”。不确定还有哪些其他类型的文件可用。给定的文件类型没有“正确”的文件名,因此您需要自己做出决定。

    【讨论】:

    • 非常感谢!唯一可以是(很少)是一个 zip 文件,所以我可能只需要检查它是否是三个之一。
    猜你喜欢
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多