簡體   English   中英

urllib.request.urlretrieve不通過HTTPS下載文件

[英]urllib.request.urlretrieve not downloading files over HTTPS

以下URL是用於下載文本文件的下載鏈接。 如果我將URL粘貼到Firefox中,它將下載實際內容,即文本文件。 但是,當使用urlretrieve它給了我一些html源代碼文件。

>>> 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])

然后,我去下載並處理文件。

首先,您應該導入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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM