2016-07-21 18 views
0

Ich habe versucht, Bilder mit URLs, die sich ändern, aber einen Fehler zu bekommen.Python Download Bilder mit Alernating Variablen

url_image="http://www.joblo.com/timthumb.php?src=/posters/images/full/"+str(title_2)+"-poster1.jpg&h=333&w=225" 

user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)' 
headers = {'User-Agent': user_agent} 
req = urllib.request.Request(url_image, None, headers) 


print(url_image) 
#image, h = urllib.request.urlretrieve(url_image) 
with urllib.request.urlopen(req) as response: 
    the_page = response.read() 

#print (the_page) 


with open('poster.jpg', 'wb') as f: 
    f.write(the_page) 

Traceback (letzter Anruf zuletzt): Datei "C: \ Benutzer \ Luk \ Desktop \ scraper \ Imager finder.py", Zeile 97, in mit urllib.request.urlopen (REQ) als Antwort: Datei "C: \ Benutzer \ luke \ AppData \ Lokale \ Programme \ Python \ Python35-32 \ lib \ urllib \ request.py", Zeile 162, in urlopen Rückkehr opener.open (URL, Daten, Timeout) Datei "C: \ Benutzer \ luke \ AppData \ Lokale \ Programme \ Python \ Python35-32 \ lib \ urllib \ request.py", Zeile 465, in geöffnet Antwort = self._open (req, Daten) Datei " C: \ Benutzer \ luke \ AppData \ Lokale \ Programme \ Python \ Python35-32 \ lib \ urllib \ request.py ", Zeile 483, in _open '_open', req) Datei "C: \ Benutzer \ luke \ AppData \ Lokale \ Programme \ Python \ Python35-32 \ lib \ urllib \ request.py", Zeile 443, in _call_chain result = func (* args) Datei "C: \ Benutzer \ luke \ AppData \ Lokale \ Programme \ Python \ Python35-32 \ lib \ urllib \ request.py", Zeile 1268, in http_open return self.do_open (http.client.HTTPConnection, req) Datei "C: \ Benutzer \ luke \ AppData \ Lokale \ Programme \ Python \ Python35-32 \ lib \ urllib \ request.py", Zeile 1243, in do_open r = h.gerresponse() Datei "C: \ Benutzer \ luke \ AppData \ Lokale \ Programme \ Python \ Python35-32 \ lib \ http \ client.py ", Zeile 1174, in getresponse response.begin() Datei" C: \ Benutzer \ luke \ AppData \ Local \ Programme \ Python \ Python35-32 \ lib \ http \ client.py ", Zeile 282, beginnend mit Version, Status, Grund = self._read_status() Datei "C: \ Benutzer \ luke \ AppData \ Lokale \ Programme \ Python \ Python35-32 \ lib \ http \ client.py", Zeile 264, in _read_status erhöhen BadStatusLine (Linie) http.client.BadStatusLine:

+0

versuchen, ohne die Header (oder der Server benötigen Sie sein Mozilla unter Windows aus irgendeinem Grund verwenden?). Außerdem wissen wir nicht, was title_2 ist. Wenn es ungerade Zeichen oder Leerzeichen gibt, muss es codiert werden. – Fhaab

+0

benutzen Sie einfach 10-Cloverfield-Lane für title_2 und ohne die Header erscheint die gleiche Fehlermeldung – spark

Antwort

0

Mein Rat ist, urlib2 zu verwenden. Außerdem habe ich eine nette Funktion geschrieben (glaube ich), die auch die gzip-Kodierung erlaubt (Bandbreite reduzieren), wenn der Server dies unterstützt. Ich benutze dies zum Herunterladen von Social-Media-Dateien, sollte aber für alles arbeiten.

Ich würde versuchen, Ihren Code zu debuggen, aber da es nur ein Snippet ist (und die Fehlermeldungen sind schlecht formatiert), ist es schwer zu wissen, wo genau Ihr Fehler auftritt (es ist sicherlich nicht Zeile 97 in Ihrem Code-Snippet).

Dies ist nicht so kurz wie es sein könnte, aber es ist klar und wiederverwendbar. Dies ist Python 2.7, es sieht aus wie Sie 3 verwenden - in dem Fall, dass Sie ein paar Fragen google, die angesprochen werden, wie in Python verwenden urllib2 3.

import urllib2 
import gzip 
from StringIO import StringIO 

def download(url): 
    """ 
    Download and return the file specified in the URL; attempt to use 
    gzip encoding if possible. 
    """ 
    request = urllib2.Request(url) 
    request.add_header('Accept-Encoding', 'gzip') 
    try: 
     response = urllib2.urlopen(request) 
    except Exception, e: 
     raise IOError("%s(%s) %s" % (_ERRORS[1], url, e)) 
    payload = response.read() 
    if response.info().get('Content-Encoding') == 'gzip': 
     buf = StringIO(payload) 
     f = gzip.GzipFile(fileobj=buf) 
     payload = f.read() 
    return payload 

def save_media(filename, media): 
    file_handle = open(filename, "wb") 
    file_handle.write(media) 
    file_handle.close() 

title_2 = "10-cloverfield-lane" 
media = download("http://www.joblo.com/timthumb.php?src=/posters/images/full/{}-poster1.jpg&h=333&w=225".format(title_2)) 
save_media("poster.jpg", media)