Python MIME类型的文件扩展名为;字符集=UTF-8
我有一个Python网络爬虫,它正在下载具有不同扩展名的文件。为了从HTTP头内容类型获得扩展,我使用Python库 除了HTTP头内容类型包含Python MIME类型的文件扩展名为;字符集=UTF-8,python,http,mime-types,content-type,Python,Http,Mime Types,Content Type,我有一个Python网络爬虫,它正在下载具有不同扩展名的文件。为了从HTTP头内容类型获得扩展,我使用Python库 除了HTTP头内容类型包含 ;字符集=UTF-8。例如,mimetypes.guess\u extension正在返回以下示例的None content-type: text/plain;charset=UTF-8 # extension should be .txt OR content-type: text/x-c;charset=UTF-8 # extension
;字符集=UTF-8
。例如,mimetypes.guess\u extension
正在返回以下示例的None
content-type: text/plain;charset=UTF-8 # extension should be .txt OR
content-type: text/x-c;charset=UTF-8 # extension should be .java
使用mimetypes进行检查:
>>> import mimetypes
>>> print(mimetypes.guess_extension('text/plain;charset=UTF-8'))
None
>>>
问题:如何处理此问题并从以结尾的内容类型中获得正确的扩展名;字符集=UTF-8
?
我想用if语句捕获此类异常不是一个好的解决方案,因为我永远不知道白名单是否完整,或者是否缺少某些内容类型。一种简单的处理方法是拆分MIME字符串,只获取第一个元素 以下代码将返回这两种情况的预期结果
http_header = session.head(url, headers={'Accept-Encoding': 'identity'})
extension = mimetypes.guess_extension(http_header.headers['content-type'].split(";")[0])))
记住这只是猜测。对于如此宽泛的定义,比如纯文本,您不能期望从中得到太多。它似乎是mimetypes.guess_extension()只取这个列表的第一个元素。这也是猜测text/plain returns.h的mimetype的原因,而.txt是明显的选择。感谢您的回答,不幸的是,这不起作用。对于
文本/纯文本;charset=UTF-8
我得到的结果是.ksh
而不是.txt
。对于文本/纯文本;charset=UTF-8
我得到的是.c
而不是.java
。这正是函数名所说的,只是猜测。对于诸如纯文本之类的广泛定义,您不能期望从中得到太多。它似乎是mimetypes.guess_extension()只取这个列表的第一个元素。这也是猜测text/plain的mimetype返回.h的原因,而.txt是明显的选择。您可能会认为dict查找比“猜测”更好。例如,image/jpeg->jpe。那太可怕了。
http_header = session.head(url, headers={'Accept-Encoding': 'identity'})
extension = mimetypes.guess_extension(http_header.headers['content-type'].split(";")[0])))