2011-07-01 13 views
5

Pisałem parser na pytona, aby pobrać obrazy z Internetu:Jak poprawnie pobierać pliki przez HTTP przez python-urllib2?

import urllib2 

for i in xrange(1,10): 
    r = urllib2.urlopen('http://example.com/'+str(i)+'.gif')) 
    f = open('C:\\' + str(i) + '.gif', 'w+') 
    f.write(r.read()) 
    f.close() 

Obrazy nie mogą być otwierane. System Windows wyświetla komunikat "Błąd podczas budowania obrazu". Ale odkryłem, że każda linia odebranego pliku mniej na 1 bajt niż ta linia oryginalnego pliku, ale obie wyglądają podobnie. Jak pobrać poprawny plik?

+3

W Windows musisz określić 'wb', nie 'w +' –

+0

to działa. Dziękuję Ci. =) – shunter

Odpowiedz

13

Podczas pracy z oknami może trzeba umieścić "binarny" Flag b w otwarty ...

f = open(r'C:\\'+str(i)+'.gif','wb') 
+0

Mniejsza opieka wyborców, aby skomentować? –

5

W Windows musisz określić 'wb', nie 'w +'

5

You może spróbować urllib.urlretrieve - obsługuje większość szczegółów samodzielnie.
Tak Twój kod będzie wyglądać następująco:

for i in xrange(1,10): 
    urllib.urlretrieve('http://example.com/'+str(i)+'.gif'), 'C:\'+str(i)+'.gif','w+') 
Powiązane problemy