2013-04-11 161 views
3

我想用python下載一個zip文件。如何使用python下載推送到瀏覽器的文件?

使用這種類型的URL, http://server.com/file.zip 這很簡單,通過使用urllib2.urlopen並將其寫入本地文件中。

但在我的情況下,我有這種類型的網址: http://server.com/customer/somedata/download?id=121&m=zip, 表單驗證後啓動下載。

在我的情況下,我想將它部署在heroku上,這樣做可能很有用,所以我不能使用用C++構建的spynner。此下載是在使用scrapy進行刮取後啓動的。

從瀏覽器下載效果很好,我用它的名字得到了一個好的zip文件。使用Python我只是得到HTML和標題數據...

有沒有什麼辦法從這種類型的URL在python中獲取文件?

+0

可能重複的[Scrapy,定義一個pipleine來保存文件?](http://stackoverflow.com/questions/7123387/scrapy-define-a-pipleine-to-save-files) – Blender 2013-04-11 17:19:00

+0

什麼是響應喜歡?它是一個HTML頁面嗎?或者它是您正在使用的實際文件,就像Scrapy'Response'對象一樣? – Blender 2013-04-11 17:27:39

+0

這不是重複的,在這裏我不能得到.body就像在pdf文件中。 – 2013-04-11 17:40:05

回答

1

本網站正在提供JavaScript,然後調用下載。 您別無選擇,只能:a)在模擬瀏覽器環境中評估JavaScript或b)手動解析JS所做的事情,並在python中重新實現它。例如字符串提取URL和下載密鑰,可能調用AJAX請求,最後下載文件

我一般推薦Mechanize用於網頁相關的自動化,但它也無法處理JavaScript,所以我想你可以堅持使用Scrapy if你想去計劃b)。

+0

Mechanize不支持JavaScript。 – Blender 2013-04-11 17:24:25

+0

我知道,但也許需要cookie – ch3ka 2013-04-11 17:24:53

+0

Scrapy負責cookies,會話,重定向等,所以我不認爲機械化會增加任何額外的功能。 – Blender 2013-04-11 17:26:04

0

當您在瀏覽器中進行下載時,打開開發人員控制檯的網絡選項卡,並記錄HTTP方法(可能是POST),POST參數,Cookie以及驗證組成部分的其他內容;然後使用庫來複制它。

相關問題