2014-01-09 129 views
1

我一直在遇到問題,我正在開發一個腳本,因爲我沒有收到任何輸出,並且隨着時間的推移,腳本的內存使用量越來越大。我發現問題在於我正在使用請求庫檢查的一些URL。我期待下載一個網頁,但是我下載了一個大文件。所有這些數據都存儲在內存中,導致我的問題。檢查是否正在通過Python下載文件請求庫

我想知道的是;請求庫有任何方式來檢查正在下載什麼?有了wget,我可以看到:長度:710330974(677M)[application/zip]。

此信息是否可用於包含請求的標頭中?如果是的話,是否有一種方法可以在確定它不是HTML網頁時終止下載?

在此先感謝。

回答

4

是的,頁眉可以告訴你很多關於頁面的信息,大多數頁面將包含一個Content-Length頁眉。

但是,默認情況下,在.get().post()等調用返回之前全部下載該請求。設置stream=True關鍵字推遲加載響應:

response = requests.get(url, stream=True) 

現在,您可以檢查標題,只是丟棄該請求,如果你不喜歡你的發現:

length = int(response.headers.get('Content-Length', 0)) 
if length > 1048576: 
    print 'Response larger than 1MB, discarding 

隨後訪問.content.text屬性或.json()方法將觸發響應的完整下載。

+0

這很好,謝謝! –

相關問題