Como fazer download de um arquivo da Web em Python 3 com uma URL armazenada em uma string
Ao tentar baixar um arquivo de um servidor web em Python 3, passar uma string como URL pode resultar em um erro ao exigir a entrada de bytes. Este artigo apresenta vários métodos para contornar esse problema e recuperar o arquivo com êxito.
Usando urllib.request.urlopen
Para obter o conteúdo de uma página da web, utilize urllib .request.urlopen(). Esta função retorna um objeto de resposta, que pode então ser lido em uma variável:
import urllib.request
url = 'http://example.com/'
response = urllib.request.urlopen(url)
data = response.read() # a `bytes` object
Usando urlib.request.urlretrieve
A maneira mais direta de baixar e salvar um arquivo é utilizar a função urllib.request.urlretrieve:
import urllib.request
url = 'http://example.com/file.txt'
urllib.request.urlretrieve(url, 'file.txt')
Este método baixa o arquivo do URL especificado e o salva localmente como 'file.txt'.
Usando urlib.request.urlopen com shutil.copyfileobj
Para maior controle sobre o processo de download, use urllib.request.urlopen() para retornar um objeto semelhante a um arquivo. Este objeto pode então ser copiado para um arquivo real usando shutil.copyfileobj():
import urllib.request
import shutil
url = 'http://example.com/file.zip'
with urllib.request.urlopen(url) as response, open('file.zip', 'wb') as out_file:
shutil.copyfileobj(response, out_file)
Armazenando o download como bytes
Se a velocidade for uma prioridade, os dados baixados podem ser armazenados diretamente em um objeto bytes e posteriormente gravado em um arquivo, embora isso seja adequado apenas para arquivos pequenos:
import urllib.request
url = 'http://example.com/icon.png'
with urllib.request.urlopen(url) as response, open('icon.png', 'wb') as out_file:
data = response.read() # a `bytes` object
out_file.write(data)
Handling Compressed Files
urllib.request.urlopen() também pode ser usado para lidar com arquivos compactados, desde que o servidor suporte acesso aleatório:
import urllib.request
import gzip
url = 'http://example.com/archive.gz'
with urllib.request.urlopen(url) as response:
with gzip.GzipFile(fileobj=response) as uncompressed:
file_header = uncompressed.read(64) # a `bytes` object
Ao implementar um desses métodos, os desenvolvedores podem baixar arquivos da web com sucesso em Python 3, mesmo quando o URL é armazenado como uma string.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3