in

¿Descarga archivos de la web usando Python?

web python

Python proporciona diferentes módulos como urllib, solicitudes, etc. para descargar archivos de la web. Voy a usar la biblioteca de solicitudes de Python para descargar archivos de manera eficiente desde las URL.

Comencemos un vistazo al procedimiento paso a paso para descargar archivos usando URL usando la biblioteca de solicitudes

1. Módulo de importación

import requests

2. Obtén el enlace o la URL.

url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)

3. Guarde el contenido con nombre.

open('facebook.ico', 'wb').write(r.content)

guarda el archivo como facebook.ico.

Ejemplo

import requests


url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)

open('facebook.ico', 'wb').write(r.content)

Resultado

web python

Podemos ver que el archivo se descarga (icono) en nuestro directorio de trabajo actual.

Pero es posible que necesitemos descargar diferentes tipos de archivos como imágenes, texto, video, etc. de la web. Entonces, primero obtengamos el tipo de datos a los que se vincula la URL.

>>> r = requests.get(url, allow_redirects=True)
>>> print(r.headers.get('content-type'))
image/png

Sin embargo, hay una forma más inteligente, que implicaba simplemente obtener los encabezados de una URL antes de descargarla. Esto nos permite omitir la descarga de archivos que no estaban destinados a ser descargados.

>>> print(is_downloadable('https://www.youtube.com/watch?v=xCglV_dqFGI'))
False
>>> print(is_downloadable('https://www.facebook.com/favicon.ico'))
True

Para restringir la descarga por tamaño de archivo, podemos obtener el filezie del encabezado de longitud del contenido y luego hacerlo según nuestro requisito.

contentLength = header.get('content-length', None)
if contentLength and contentLength > 2e8: # 200 mb approx
return False

Obtener el nombre de archivo de una URL

Para obtener el nombre del archivo, podemos analizar la URL. A continuación se muestra una rutina de muestra que recupera la última cadena después de la barra invertida (/).

url= "http://www.computersolution.tech/wp-content/uploads/2016/05/tutorialspoint-logo.png"
if url.find('/'):
print(url.rsplit('/', 1)[1]

Arriba le dará el nombre de archivo de la URL. Sin embargo, hay muchos casos en los que la información del nombre de archivo no está presente en la URL, por ejemplo, http://url.com/download. En tal caso, necesitamos obtener el encabezado Content-Disposition, que contiene la información del nombre del archivo.

import requests
import re

def getFilename_fromCd(cd):
"""
Get filename from content-disposition
"""
if not cd:
return None
fname = re.findall('filename=(.+)', cd)
if len(fname) == 0:
return None
return fname[0]


url = 'http://google.com/favicon.ico'
r = requests.get(url, allow_redirects=True)
filename = getFilename_fromCd(r.headers.get('content-disposition'))
open(filename, 'wb').write(r.content)

El código de análisis de URL anterior junto con el programa anterior le dará el nombre de archivo del encabezado Content-Disposition la mayor parte del tiempo.

raja

Publicado el 02-mayo-2019 12:00:00

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

bioniX wallpaper app

Cómo configurar fondos de pantalla en vivo en Windows 10

apple touch icon@2

página de manual – ¿Dónde está el programa ‘man’ para Windows (Programa para abrir páginas de manual de UNIX)?