2016-12-05 5 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 OKであることがわかります。ありがとうございました。

答えて

1

ブラウザがサーバーに送信するすべてのヘッダーを確認する必要があります。

このページでは、2つのヘッダ必要:User-AgentCookie

をあなたはクロームやFirefoxでDevToolsを使用している場合は、通常のブラウザは(それはまだクッキーを持っていない場合)にリダイレクトクッキーと302 Moved Temporarilyとの最初の応答を受信して​​いることがわかります同じURLだがクッキーと一緒に画像を受け取る。

私のクッキーを試すことができますし、多分イメージを受け取ることができます。通常、あなたは2つの要求をする必要があります - まずクッキーを取得し、2番目のクッキーを使用してイメージを取得します。

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) 

あなたがrequestsモジュールを使用する場合は、それがすべて自動的に行います、あなたは必要はありません2つの要求があります。

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'クラスを使用する必要がありますが、もっと多くの作業が必要です。 – furas

関連する問題