Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MIME类型的文件扩展名为;字符集=UTF-8_Python_Http_Mime Types_Content Type - Fatal编程技术网

Python MIME类型的文件扩展名为;字符集=UTF-8

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

我有一个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 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])))