欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 附件采集文件类型识别方案

附件采集文件类型识别方案

2025/2/22 16:37:49 来源:https://blog.csdn.net/weixin_43845191/article/details/139621022  浏览:    关键词:附件采集文件类型识别方案

背景

咱们做爬虫的或多或少都会遇到附件下载,一般情况站点提供的附件链接会直接声明文件的类型,但是有些提供的只是一个api,然后触发下载时再返回附件文本,这个时候我们是没法直接知道文件类型的,而我们使用requests下载并存储附件时是必须要定义好它的文件类型的,那有什么解决方案呢?

解决方案

mimetypes

mimetypes是python内置库,它能映射文件名到 MIME 类型,使用下面命令可以得到文件的MIME 类型

def get_file_type(file_path):mime_type, _ = mimetypes.guess_type(file_path)if mime_type is None:return Noneelse:return mime_type# 示例使用
file_path = r'测试.pdf'
file_type = get_file_type(file_path)
print(f"The file type is: {file_type}")

运行结果:The file type is: application/pdf

得到结果后,我们可以构建映射表来得到实际的文件结尾名,下面我提供一些映射关系

MIME_MAP = {'audio/aac': 'aac','application/x-abiword': 'abw','image/apng': 'apng','application/x-freearc': 'arc','image/avif': 'avif','video/x-msvideo': 'avi','application/vnd.amazon.ebook': 'azw','application/octet-stream': 'bin','image/bmp': 'bmp','application/x-bzip': 'bz','application/x-bzip2': 'bz2','application/x-cdf': 'cda','application/x-csh': 'csh','text/css': 'css','text/csv': 'csv','application/msword': 'doc','application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx','application/vnd.ms-fontobject': 'eot','application/epub+zip': 'epub','application/gzip': 'gz','image/gif': 'gif','text/html': 'htm,','image/vnd.microsoft.icon': 'ico','text/calendar': 'ics','application/java-archive': 'jar','image/jpeg': 'jpeg,','text/javascript': 'js','application/json': 'json','application/ld+json': 'jsonld','audio/midi、audio/x-midi': 'mid,','audio/mpeg': 'mp3','video/mp4': 'mp4','video/mpeg': 'mpeg','application/vnd.apple.installer+xml': 'mpkg','application/vnd.oasis.opendocument.presentation': 'odp','application/vnd.oasis.opendocument.spreadsheet': 'ods','application/vnd.oasis.opendocument.text': 'odt','audio/ogg': 'oga','video/ogg': 'ogv','application/ogg': 'ogx','audio/opus': 'opus','font/otf': 'otf','image/png': 'png','application/pdf': 'pdf','application/x-httpd-php': 'php','application/vnd.ms-powerpoint': 'ppt','application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx','application/vnd.rar': 'rar','application/rtf': 'rtf','application/x-sh': 'sh','image/svg+xml': 'svg','application/x-tar': 'tar','image/tiff': 'tif,','video/mp2t': 'ts','font/ttf': 'ttf','text/plain': 'txt','Visio application/vnd.visio': 'vsd','audio/wav': 'wav','audio/webm': 'weba','video/webm': 'webm','image/webp': 'webp','font/woff': 'woff','font/woff2': 'woff2','application/xhtml+xml': 'xhtml','application/vnd.ms-excel': 'xls','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx','application/vnd.mozilla.xul+xml': 'xul','application/zip': 'zip','audio/3gpp': '3gp','audio/3gpp2': '3g2','application/x-7z-compressed': '7z','application/x-compressed': 'rar',
}

依赖这个其实可以快速得出文件的类型,但是这个库没法支持二进制识别啊,这很明显不符合我们的需求

python-magic

python-magic是第三方库,需要单独安装

pip install python-magic

Windows 下需要安装 libmagic 的DLL,否则报错ImportError: failed to find libmagic. Check your installation

pip install python-magic-bin

判断代码

import magic
print(magic.from_file('test.jpg'))
print(magic.from_file('test.jpg', mime=True)) 
print(magic.from_buffer(open('test.jpg', 'rb').read(), mime=True))  #  二进制读取

响应体Content-Disposition、Content-Type

一般情况下响应体会返回Content-DispositionContent-Type声明文件类型
在这里插入图片描述

文件的文件头标识

这篇博客提供了常见的二进制常见文件标识

https://blog.csdn.net/yagerfgcs/article/details/51427085

但是研究发现像docx和zip是一样的标识,有些文件还不固定,大家看着用

结束

暂时研究到这,大家有好的方案可以分享分享

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词