Cómo verificar la url es un enlace de página web o un enlace de archivo en python

Supongamos que tengo enlaces de la siguiente manera:

http://example.com/index.html http://example.com/stack.zip http://example.com/setup.exe http://example.com/news/ 

En los enlaces anteriores, los enlaces primero y cuarto son enlaces a páginas web y el segundo y tercero son los enlaces a archivos.

Estos son solo algunos ejemplos de enlaces de archivos, por ejemplo, .zip y .exe, pero puede haber muchos otros archivos.

¿Hay alguna forma estándar de distinguir entre la URL del archivo o el enlace de la página web? Gracias por adelantado.

 import urllib import mimetypes def guess_type_of(link, strict=True): link_type, _ = mimetypes.guess_type(link) if link_type is None and strict: u = urllib.urlopen(link) link_type = u.headers.gettype() # or using: u.info().gettype() return link_type 

Manifestación:

 links = ['http://stackoverflow.com/q/21515098/538284', # It's a html page 'http://sofes.miximages.com/file/Wikipedia_wordmark_1x.png', # It's a png file 'http://commons.wikimedia.org/wiki/File:Typing_example.ogv', # It's a html page 'http://upload.wikimedia.org/wikipedia/commons/e/e6/Typing_example.ogv' # It's an ogv file ] for link in links: print(guess_type_of(link)) 

Salida:

 text/html image/x-png text/html application/ogg 
 import urllib mytest = urllib.urlopen('http://www.sec.gov') mytest.headers.items() ('content-length', '20833'), ('expires', 'Sun, 02 Feb 2014 19:36:12 GMT'), ('server', 'SEC'), ('connection', 'close'), ('cache-control', 'max-age=0'), ('date', 'Sun, 02 Feb 2014 19:36:12 GMT'), ('content-type', 'text/html')] 

mytest.headers.items () es una lista de tuplas. En mi ejemplo, puede ver que el último elemento de la lista describe el contenido.

No estoy seguro de si la longitud varía, por lo que podría recorrerla para encontrar la que tiene “tipo de contenido”.