Verificando se um arquivo está sendo baixado por Python, Pedidos de biblioteca
-
21-12-2019 - |
Pergunta
Eu tenho tido problemas com um script que eu estou desenvolvendo de forma que eu estou recebendo sem saída, e o uso de memória do script está ficando maiores e maiores ao longo do tempo.Eu descobri que o problema está com algumas das URLs estou verificando com os Pedidos de biblioteca.Eu estou esperando para fazer o download de uma página da web no entanto eu baixar um arquivo grande em vez disso.Todos os dados são então armazenados na memória fazendo com que os meus problemas.
O que eu quero saber é;existe alguma maneira com os pedidos de biblioteca para verificar o que está sendo baixado?Com o wget eu posso ver:Comprimento:710330974 (677M) [application/zip].
Esta informação é disponível em cabeçalhos de pedidos?Se então existe uma maneira de terminar o download após descobrir que ele não é uma página HTML?
Obrigado antecipadamente.
Solução
Sim, os cabeçalhos podem dizer muito sobre a página, mais páginas irá incluir um cabeçalho de Comprimento de Conteúdo.
Por padrão, no entanto, o pedido é transferido em sua totalidade antes do .get()
ou .post()
, etc.chamada retorna.Definir o stream=True
palavra-chave para adiar a carregar a resposta:
response = requests.get(url, stream=True)
Agora você pode inspecionar os cabeçalhos e apenas rejeitar o pedido se você não gostar do que encontrar:
length = int(response.headers.get('Content-Length', 0))
if length > 1048576:
print 'Response larger than 1MB, discarding
Posteriormente acessando o .content
ou .text
atributos, ou o .json()
método irá disparar um download completo da resposta.