загрузка индикатор выполнения urllib2 python - PullRequest
0 голосов
/ 26 апреля 2011

, поэтому я хотел сделать индикатор или проценты, используя urllib2.

Я нашел этот код в другом вопросе о переполнении стека:

import urllib2, sys

def chunk_report(bytes_so_far, chunk_size, total_size):
   percent = float(bytes_so_far) / total_size
   percent = round(percent*100, 2)
   sys.stdout.write("Downloaded %d of %d bytes (%0.2f%%)\r" % 
       (bytes_so_far, total_size, percent))

   if bytes_so_far >= total_size:
      sys.stdout.write('\n')

def chunk_read(response, chunk_size=8192, report_hook=None):
   total_size = response.info().getheader('Content-Length').strip()
   total_size = int(total_size)
   bytes_so_far = 0

   while 1:
      chunk = response.read(chunk_size)
      bytes_so_far += len(chunk)

      if not chunk:
         break

      if report_hook:
         report_hook(bytes_so_far, chunk_size, total_size)

   return bytes_so_far

if __name__ == '__main__':
   response = urllib2.urlopen('http://www.ebay.com');
   chunk_read(response, report_hook=chunk_report)

, но я не знаю, где он загружается

так как бы вы исправили этот код, чтобы знать, куда он загружается или кодируется для индикатора выполнения.

1 Ответ

2 голосов
/ 26 апреля 2011

Похоже, данные отбрасываются.Вы можете изменить функцию chunk_read, чтобы сохранить ее в файл.

Изменено chunk_read вернет прочитанные данные:

def chunk_read(response, chunk_size=8192, report_hook=None):
   total_size = response.info().getheader('Content-Length').strip()
   total_size = int(total_size)
   bytes_so_far = 0
   data = []

   while 1:
      chunk = response.read(chunk_size)
      bytes_so_far += len(chunk)

      if not chunk:
         break

      data += chunk
      if report_hook:
         report_hook(bytes_so_far, chunk_size, total_size)

   return "".join(data)
...