如何在Python 3 中使用儲存在字串中的URL 從Web 下載檔案
當嘗試從在Python 3 中的Web伺服器中,傳遞字串作為URL 可能會導致需要位元組輸入的錯誤。本文介紹了幾種規避此問題並成功檢索文件的方法。
使用 urllib.request.urlopen
要取得網頁的內容,請使用 urllib .request.urlopen()。此函數傳回一個回應對象,然後可以將其讀入變數:
<code class="python">import urllib.request url = 'http://example.com/' response = urllib.request.urlopen(url) data = response.read() # a `bytes` object</code>
使用urlib.request.urlretrieve
最直接的下載和下載方法保存檔案是利用urllib.request.urlretrieve 函數:
<code class="python">import urllib.request url = 'http://example.com/file.txt' urllib.request.urlretrieve(url, 'file.txt')</code>
此方法從指定的URL 下載檔案並在本地儲存為'file.txt'。
將urlib.request.urlopen 與Shutil.copyfileobj 結合使用
為了更好地控制下載過程,請使用urllib.request.urlopen() 傳回一個類似文件的對象。然後可以使用shutil.copyfileobj()將該物件複製到真實檔案:
<code class="python">import urllib.request import shutil url = 'http://example.com/file.zip' with urllib.request.urlopen(url) as response, open('file.zip', 'wb') as out_file: shutil.copyfileobj(response, out_file)</code>
將下載儲存為位元組
如果速度是優先考慮的,則下載的資料可以直接儲存到位元組物件中,然後寫入文件,儘管這僅適用於小文件:
<code class="python">import urllib.request url = 'http://example.com/icon.png' with urllib.request.urlopen(url) as response, open('icon.png', 'wb') as out_file: data = response.read() # a `bytes` object out_file.write(data)</code>
處理壓縮檔案
urllib.request.urlopen() 也可以用於處理壓縮文件,前提是伺服器支援隨機存取:
<code class="python">import urllib.request import gzip url = 'http://example.com/archive.gz' with urllib.request.urlopen(url) as response: with gzip.GzipFile(fileobj=response) as uncompressed: file_header = uncompressed.read(64) # a `bytes` object</code>
透過實作其中一種方法,開發人員可以在Python 3 中成功從網路下載文件,即使URL 儲存為字串。
以上是如何從 Python 3 儲存為字串的 URL 下載檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!