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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top