Vérifier si un fichier est en cours de téléchargement par la bibliothèque Python Requests

StackOverflow https://stackoverflow.com//questions/21021120

  •  21-12-2019
  •  | 
  •  

Question

J'ai rencontré des problèmes avec un script que je développe, dans lequel je ne reçois aucune sortie et l'utilisation de la mémoire du script devient de plus en plus importante avec le temps.J'ai compris que le problème réside dans certaines des URL que je vérifie avec la bibliothèque Requests.Je m'attends à télécharger une page Web, mais je télécharge plutôt un gros fichier.Toutes ces données sont ensuite stockées en mémoire, provoquant mes problèmes.

Ce que je veux savoir, c'est ;existe-t-il un moyen avec la bibliothèque de requêtes de vérifier ce qui est en cours de téléchargement ?Avec wget, je peux voir :Longueur:710330974 (677M) [application/zip].

Ces informations sont-elles disponibles dans les en-têtes des demandes ?Si tel est le cas, existe-t-il un moyen de mettre fin au téléchargement après avoir découvert qu'il ne s'agit pas d'une page Web HTML ?

Merci d'avance.

Était-ce utile?

La solution

Oui, les en-têtes peuvent vous en dire beaucoup sur la page, la plupart les pages incluront un en-tête Content-Length.

Toutefois, par défaut, la requête est téléchargée dans son intégralité avant le .get() ou .post(), etc.l'appel revient.Met le stream=True mot-clé pour différer le chargement de la réponse :

response = requests.get(url, stream=True)

Vous pouvez désormais inspecter les en-têtes et simplement ignorer la requête si vous n'aimez pas ce que vous trouvez :

length = int(response.headers.get('Content-Length', 0))
if length > 1048576:
    print 'Response larger than 1MB, discarding

En accédant ensuite au .content ou .text attributs, ou le .json() La méthode déclenchera un téléchargement complet de la réponse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top