2016-10-02 131 views
1

以下URL是下載鏈接以下載文本文件。 如果我將URL粘貼到Firefox中,它會下載實際內容,例如文本文件。但是,當使用urlretrieve它給了我一些html源代碼文件。urllib.request.urlretrieve不通過HTTPS下載文件

>>> import urllib 
>>> down_link='URL' #URL is a ***HTTPS*** link to download .txt file 
>>> file=urllib.request.urlretrieve(down_link) 

這是輸出我得到:

>>> 
('C:\\Users\\rakesh.j.kulkarni\\AppData\\Local\\Temp\\tmps7559wgi' 
http.client.HTTPMessage object at 0x03A3C610>) 

打開該文件時,我得到它的時候用瀏覽器,它在同一網頁的登錄表單打開HTML源文件,

所以我要拿出替代過程暫時做同樣的事情直到問題得到解決

subprocess.Popen(["C:\Program Files (x86)\Google\Chrome\Application\chrome.exe", down_link]) 

然後我去下載並在文件上工作。

回答

3

首先,您應該導入urllib.request,而不僅僅是urllib(在Py3中)。
然後您將對象分配給一個變量,以便它將對象實例作爲輸出提供給您。 沒有錯,只是給你一個速戰速決,嘗試做:

In [1]: import urllib.request 

In [2]: down_link = "http://vignette3.wikia.nocookie.net/shipoffools/images/4/42/Surprised_Luffy.jpg/revision/latest?cb=20120921134043" 

In [3]: path_to_save = "../luffy.jpg" 

In [4]: urllib.request.urlretrieve(down_link, path_to_save) 
Out[4]: ('../luffy.jpg', <http.client.HTTPMessage at 0x47f6af0>) 

這會工作得很好,節省您想要的圖像。 如果你沒有指定path_to_save,那很好,因爲它會下載反正和路徑將是tmp目錄,在你的情況下,它會是C:\\Users\\rakesh.j.kulkarni\\AppData\\Local\\Temp\\文件夾。

https相關的錯誤或其他問題的情況下,有這樣做,通過讀取該文件與urlopen並將其保存在您的計算機上的文件的更清潔的方式:

In [5]: import urllib.request as req 

In [6]: down_link = "https://vignette3.wikia.nocookie.net/shipoffools/images/4/42/ 
    ...: Surprised_Luffy.jpg/revision/latest?cb=20120921134043" 

In [7]: fname = "../luffy.jpg" 

In [8]: with req.urlopen(down_link) as d, open(fname, "wb") as opfile: 
    ...:  data = d.read() 
    ...:  opfile.write(data) 
    ...: 

注意:此方法可能需要一些時間,但對於正常的小文件來說工作得很好。


javascript下載/重定向:在javascript或php腳本下載的情況下,使用 subprocess在瀏覽器中打開鏈接實際上並不是動態代碼,因爲您需要指定瀏覽器的路徑,您可以使用一個預先存在的模塊 webbrowser,它會自動檢測系統中的默認瀏覽器並打開url。

import webbrowser 
url = ... 
webbrowser.open(url, autoraise=True) # normal 
webbrowser.open_new(url)    # new window 
webbrowser.open_new_tab(url)   # new tab 
+0

我忘了提,這是一個的「https」的要求,我試着用你的方法,但仍然我得到的,而不是實際的文本文件 – user2728397

+0

在它的HTML源相同的文件,只是做了編輯,怎麼樣,那會起作用嗎? –

+0

我不明白爲什麼它不工作,當我得到的HTML源碼,我試圖打開它的網頁瀏覽器,它給了我的網站登錄頁面,所以我想出了不同的過程,而不是'subprocess.Popen ([「C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe」,down_link])'現在它下載文本文件並將其保存在下載文件中,然後處理該文件。 – user2728397