2017-08-03 70 views
0

我想创建一个简单的基于Python的实用程序,它可以从网页获取所有下载URL并下载内容。我发现了这样做的几种方法,我发现的最好的方法是“urllib”。但不幸的是我的问题是我无法保存那些具有适当扩展为网址看起来像下面,从URL中检索文件并将其保存为正确的扩展名

http://example.com/2w3xa75

但内容可以在不同的格式,即.MP3,.OGG等

如何识别类型并使用正确的扩展名保存这些内容。

+0

您可以尝试使用[urllib.request.urlretrieve](https://docs.python.org/dev/library/urllib.request.html#urllib.request.urlretrieve) – TheDetective

+0

您可以将响应标题'Content -Type“设置为正确的扩展名,假设它被设置为文件类型而不是八位字节流。 – T4rk1n

回答

1

您可以使用requestsmimetypes

的想法是提取Content-Type HTTP标头,并要求mimetypes猜测相关的扩展。

我会用这个问题的URL为例(它不提供扩展名)

import requests 
import mimetypes 

query = requests.get('https://stackoverflow.com/questions/45488909/retrieve-files-from-urls-and-save-those-with-correct-extension') 
content_type = query.headers['Content-Type'] 

print(mimetypes.guess_extension(content_type.split(';')[0])) 

输出:

.html 

一个Content-Type标题是这样的:'text/html; charset=utf-8',但只有第一部分( text/html)预计由mimetypes.guess_extension,这就是为什么我分裂它。

+0

它似乎在工作。但问题是我得到的扩展。我得到的输出为.exe。但是,如果我点击链接下载是一个不同的(例如.mp3)我知道的一件事是目标网站已与微软技术开发。任何想法? – NIK

+0

那么,你将不得不给我你想抓取的网址,因为我无法做任何事情,没有 – Arount

+0

非常感谢。这是完成这件事的正确方法。但不幸的是我的问题是不同的。我正在测试这个有趣的网站似乎正在执行一个.exe来开始下载。这使得不可能从“mimetype”中获取文件类型 – NIK

相关问题