2016-12-05 115 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 responce的狀態爲200 OK。謝謝。

回答

1

您應該檢查瀏覽器發送到服務器的所有標題。

此頁面需要兩個頭:User-AgentCookie

如果您在Chrome或Firefox使用DevTools你會看到,一般的瀏覽器(如果沒有Cookie還)接收與cookie的第一反應和302 Moved Temporarily其重定向到相同的網址,但與cookie,然後它會收到圖像。

你可以嘗試我的cookie,也許它收到圖像。通常你必須做兩個請求 - 第一個獲取cookie,第二個(使用cookie)獲取圖像。

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模塊,然後它會自動做的一切,你將不需要兩個請求。

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

我能不能從這個網站得到有效的cookies?看來urllib2.urlopen(req)不能接收cookies? –

+1

與'urllib.request',你將不得不使用'CookieJar'類,但它需要更多的工作 - 所以我總是使用'request'模塊。 – furas

相關問題