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

news2024/10/6 2:28:10

背景

咱们做爬虫的或多或少都会遇到附件下载,一般情况站点提供的附件链接会直接声明文件的类型,但是有些提供的只是一个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 None
    else:
        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是一样的标识,有些文件还不固定,大家看着用

结束

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为了能够实现躺在家里办公,我发现了teamOS,免费搞定在线编辑,还能满足多人协同编辑,太香了

在快节奏的现代生活中,传统的办公室模式似乎变得越来越局限。 在出差途中,在一个个的临时会议上,我们都越来越需要一个更为灵活、高效的工作模式。 想要实现随时随地打开文件,与团队成员实时协作,共同编辑文档&…

on ethernetPacket事件函数接收报文时标准的处理流程

on ethernetPacket可以用来接收指定报文,并根据一些判断条件,比如目标MAC地址和IP地址判断报文是否是发给"我"的。 比如想通过on ethernetPacket *来接收发送给02:00:00:00:00:17和192.168.0.17的SYN报文。CAPL代码可以这样写: variables {ethernetPacket …

Vue.js结合ASP.NET Core构建用户登录与权限验证系统

1. 环境准备2. 创建项目3. Vue配置步骤一: 安装包步骤二: 配置文件步骤三: 页面文件 4. 后台配置 在本教程中,我将利用Visual Studio 2022的强大集成开发环境,结合Vue.js前端框架和ASP.NET Core后端框架,从头开始创建一个具备用户登录与权限验…

SwiftUI 中的自定义Shape

在SwiftUI中,Shape协议允许开发者定义可重用的图形,这些图形可以用于绘制界面元素,如按钮、背景、边框等。通过实现 Shape 协议,可以创建完全自定义的图形,并控制其绘制方式。本文将详细介绍如何在 SwiftUI 中创建自定…

Qt-Advanced-Docking-System的学习

Qt-Advanced-Docking-System使用说明_cdockmanager-CSDN博客 示例1&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include "DockManager.h" #include "QtDock/DockAreaWidget.h" namespace Ui { class MainWind…

计算机组成原理之运算方法和运算器

文章目录 数据与文字的表示方法定点表示法机器码&#xff08;机器数&#xff09;原码 反码补码移码 浮点表示法尾数规格化 数据与文字的表示方法 定点表示法 机器码&#xff08;机器数&#xff09; 正数的原码、反码、补码一样&#xff0c;负数的原码、反码、补码的符号位均为…

迅狐矩阵系统:智能化多平台内容管理与发布

迅狐矩阵系统是一套专为提高数字内容管理和发布效率而设计的综合性解决方案。它通过一系列智能化功能&#xff0c;帮助用户实现多平台内容的高效管理和发布&#xff0c;以下是系统的几大核心优势&#xff1a; 多平台绑定发布 迅狐矩阵系统支持用户绑定多个平台的多个账号&…

linux驱动学习(十一)之内核时钟

需要板子一起学习的可以这里购买&#xff08;含资料&#xff09;&#xff1a;点击跳转 一、内核时钟 1、内核时钟 内核时钟&#xff08;Kernel Clock&#xff09;&#xff0c;也称为系统时钟&#xff08;System Clock&#xff09;或滴答时钟&#xff08;Tick Timer&#xff0…

使用LANGCHAIN和GEMINI构建AI应用程序

借助这些先进技术&#xff0c;您可以生成文本、分析图像并实现多模态 AI 交互。 LangChain 和 Google 的 Gemini API 是什么&#xff1f; LangChain&#xff1a;构建 AI 应用程序的弹性框架 LangChain 是一个强大且灵活的框架&#xff0c;可以简化 AI 应用程序的开发。它提供…

绝对新惊喜:4款王者级别的办公软件,免费又实用

工作里有那么多规矩&#xff0c;但效率绝对是重中之重&#xff0c;选对了好软件&#xff0c;工作就能更高效&#xff0c;下班也能更早回家。 要是你也想做个“时间管理小能手”&#xff0c;下面这4款超好用的办公软件&#xff0c;你可千万别错过&#xff01; Gitmind 现在很…

奇绩创坛 2024 年春季创业营路演

奇绩创坛 2024 年春季创业营路演 奇绩创坛在北京中关村举办的 2024 年春季创业营路演 奇绩创坛在北京中关村举办的 2024 年春季创业营路演 RWKV 元始智能的COO罗璇在会议上详细分享了RWKV的创新模型架构、最新进展以及当前的研究方向。 目前&#xff0c;RWKV架构已经推出了最…

五、LVS原理

目录 5.1 LVS 相关原理 5.1.1 LVS集群的体系结构以及特点 5.1.1.1 LVS简介 5.1.1.2 LVS体系结构 5.1.1.3 LVS相关术语 5.1.1.4 LVS工作模式 5.1.1.5 LVS调度算法 5.1.2 LVS-DR集群介绍 5.1.2.1 LVS-DR模式工作原理 5.1.2.2 LVS-DR模式应用特点 5.1.2.3 LVS-DR模式ARP抑制 5.1…

使用Transformer进行抄袭检测

动机 在许多行业中&#xff0c;尤其是在学术界&#xff0c;抄袭是一个重大问题。随着互联网和开放信息的兴起&#xff0c;这种现象甚至变得更加严重&#xff0c;任何人都可以通过点击访问特定主题的任何信息。 基于这一观察&#xff0c;研究人员一直在尝试使用不同的文本分析…

生成高保真度3D数字人化身:打造你的专属虚拟形象

在数字化时代,我们的虚拟形象正变得越来越重要。现在,一项前沿技术正将这一领域推向新的高度——生成高保真度的3D数字人化身。这项技术不仅可以将你的形象以3D形式呈现,更能赋予它生命,让你的虚拟形象拥有丰富的表情和动作。 一、技术简介 这项技术就像是一个高级的3D照…

最简单的方法,连续打印多个空格

1、大家都知道&#xff0c;c语言中&#xff0c;我们打印语句时&#xff0c;如果使用\t来控制打印间隔&#xff0c;可能会出现排版错乱问题&#xff0c;所以一般都会使用空格来控制间隔&#xff0c;这样不管在哪个工具上面显示&#xff0c;打印的信息都不会错乱。 2、控制间隔的…

fdtd(时域有限差分)仿真

FDTD Solutions 是一款非常好用的微纳光学设计工具。该软件提供了丰富的设计功能&#xff0c;支持 CMOS 图像传感器&#xff0c;OLED 和液晶&#xff0c;表面计量&#xff0c;表面等离子体&#xff0c;石墨烯&#xff0c;太阳能电池&#xff0c;集成光子组件&#xff0c;超材 料…

Offline :Adversarially Trained Actor Critic for Offline Reinforcement Learning

ICML 2022 paper code 基于Stackelberg游戏博弈形式&#xff0c;对抗的学习actor与critic Intro Method 将离线RL的Stackelberg博弈表述为一个双层优化问题&#xff0c;学习者策略π∈Π为领导者&#xff0c;批评家f∈F为跟随者: π ^ ∗ ∈ argmax ⁡ π ∈ I I L μ ( π…

JVM如何确定方法调用

方法调用并不等同于方法执行&#xff0c;方法调用阶段唯一的任务就是确定调用哪一个方法&#xff0c;不涉及方法内部的具体运行过程。在程序运行时&#xff0c;进行方法调用是最普遍、最频繁的操作&#xff0c;但Class文件的编译过程中不包含传统编译中的连接步骤&#xff0c;一…

破解动态网页:如何用JavaScript获取自动消失的联想词

前几天在做数据分析时&#xff0c;我尝试获取某网站上输入搜索词后的联想词&#xff0c;输入搜索词后会弹出一个显示联想词的框。有趣的是&#xff0c;当我尝试通过按F12定位这个弹框在HTML中的位置时&#xff0c;输入框失去焦点后&#xff0c;联想词弹框就自动消失了。我观察到…

UnityAPI学习之Animator的基本使用

动画与动画控制器 示例1&#xff1a; 创建Animator对动画控制器进行统一管理&#xff0c;在Gris中创建Animator组件&#xff0c;并对其中的Controller属性进行赋值 在进行动画创作前&#xff0c;需先将图片的Texture Type属性改为Sprite(2D and UI) 再将一系列图片拖入Gris物…