2016-12-05 1 views
0

입니다. gif 이미지가있는 링크가 있지만 urllib2에서 다운로드 할 수 없습니다.urllib2.urlopen은 이미지를 가져올 수 없지만 브라우저는

import urllib.request as urllib2 
uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q' 
try: 
    req = urllib2.Request(uri, headers={ 'User-Agent': 'Mozilla/5.0' }) 
    file = urllib2.urlopen(req) 
except urllib2.HTTPError as err: 
    print('HTTP error!!!') 
    file = err 
    print(err.code) 
except urllib2.URLError as err: 
    print('URL error!!!') 
    print(err.reason) 
    return 

data = file.read(1024) 
print(data) 

스크립트가 완료된 후에도 데이터는 비어 있습니다. 왜 그렇게됩니까? HTTPError가 없습니다. 브라우저 콘솔에 유효한 gif가 있고 HTTP 응답의 상태가 200입니다. 확인할 수 있습니다. 고맙습니다.

답변

1

브라우저가 서버로 보내는 모든 헤더를 확인해야합니다. 당신은 크롬이나 파이어 폭스에서 DevTools를 사용하는 경우 (이 아직 쿠키가없는 경우) 당신이 일반적으로 브라우저를 볼 수 User-AgentCookie

쿠키와 첫 번째 응답을 수신하고 리디렉션 302 Moved Temporarily :

이 페이지는 두 개의 헤더를 필요 같은 URL이지만 쿠키를 사용하면 이미지를받습니다.

내 쿠키를 사용해보고 이미지를받을 수 있습니다. Bu는 일반적으로 두 가지 요청을 수행해야합니다. 첫 번째는 쿠키를 얻고 두 번째는 쿠키를 사용하여 이미지를 얻는 것입니다. 당신이 requests 모듈을 사용하는 경우

import urllib.request as urllib2 

uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q' 

headers = { 
    'User-Agent': 'Mozilla/5.0', 
    'Cookie': 'JEB2=583077046E650E2495131DE8FD2F1371', 
} 

try: 
    req = urllib2.Request(uri, headers=headers) 
    f = urllib2.urlopen(req) 
except urllib2.HTTPError as err: 
    print('HTTP error!!!') 
    f = err 
    print(err.code) 
except urllib2.URLError as err: 
    print('URL error!!!') 
    print(err.reason) 

data = f.read(1024) 
print(data) 

는 자동으로 모든 것을 할 것입니다 그리고 당신 필요없이 두 개의 요청을 것입니다.

import requests 

uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q' 

headers = { 
    'User-Agent': 'Mozilla/5.0', 
} 

r = requests.get(uri, headers=headers) 

print(r.content) 
+0

나는이 사이트에서 유효한 쿠키를 얻을 수 있습니까? 그것은 urllib2.urlopen (req) 쿠키를받을 수없는 것? –

+1

을'urllib.request'와 함께 사용하면'CookieJar' 클래스를 사용해야하지만 더 많은 작업이 필요합니다. 그래서 나는 항상'requests' 모듈을 사용합니다. – furas

관련 문제