#python #urllib2
#python #urllib2
Вопрос:
итак, я хотел создать индикатор выполнения или процент, используя 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:
Похоже, данные удалены. Вы можете изменить 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)