Python爬蟲:使用urllib.request.urlretrieve下載網絡資源

一、urlretrieve函數的基本用法

Python作為一門強大的編程語言,為我們提供了各種各樣的庫,其中urllib庫是Python內置的一個HTTP客戶端庫,可以模擬瀏覽器請求,獲取網頁數據,進而實現爬蟲操作。其中urllib.request模塊下的urlretrieve函數可以用來下載網絡資源,其基本用法如下:

import urllib.request
url = 'http://www.example.com/example.jpg' # 資源的URL地址
filename = 'example.jpg' # 文件的保存名稱
urllib.request.urlretrieve(url, filename) # 下載資源並保存到本地

其中,url參數為資源的URL地址,最好包含協議頭(http或https),filename參數為保存文件的名稱,下載完成後就可以在本地看到該文件了。

二、urlretrieve函數的參數詳解

urlretrieve函數還有其他的一些可選的參數,下面是一些常用的參數的詳解:

1. reporthook參數

reporthook參數可以用來設置一個回調函數(callback function),用於監視下載進度。這個回調函數接受三個參數:目前已經傳輸的數據塊數、每塊數據的大小、總大小。我們可以根據這些信息打印出下載進度條等信息。

import urllib.request
import os
url = 'http://www.example.com/example.jpg'
filename = 'example.jpg'
path = os.path.join(os.getcwd(), 'downloads') # 下載文件的保存路徑
if not os.path.exists(path): # 檢查路徑是否存在,不存在就新建一個
    os.mkdir(path)
urllib.request.urlretrieve(url, os.path.join(path, filename), 
                            reporthook=lambda blocknum, blocksize, totalsize: 
                            print('\rdownloading %.2f%%' % (blocknum * blocksize * 100 / totalsize)), 
                            data=None) # 設置回調函數

以上代碼中的reporthook參數中的lambda函數將當前下載進度實時輸出,在後面的data參數中可以設置數據塊的大小,默認為8192字節。

2. data參數

data參數也是一個回調函數,可以用來獲取服務器的響應(response)頭部信息。這裡的響應頭部包括一些瀏覽器支持的HTTP頭部,可以根據需求選擇讀取哪些信息。函數的調用方式與reporthook類似。

import urllib.request
url = 'http://www.example.com'
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) # 添加請求頭
with urllib.request.urlopen(req) as response:
    headers = response.info()
    urllib.request.urlretrieve(url, 'index.html', data=lambda *args, **kwargs: headers)
print(headers)

以上代碼中將發送一個HTTP請求,使用with語句進行響應處理,然後將響應頭部信息保存到本地文件中。

3. context參數

context參數可以用來訪問HTTPS網站,它可以是一個ssl.SSLContext對象,也可以是None。ssl.SSLContext對象可以用來存儲證書驗證信息和協議選項,從而實現安全的HTTPS連接。如果不設置該參數,Python會使用默認的上下文信息,但可能會遇到安全問題。

import urllib.request
import ssl
url = 'https://www.example.com'
ssl._create_default_https_context = ssl._create_unverified_context # 全局設置不進行證書驗證
urllib.request.urlretrieve(url, 'index.html', context=ssl._create_unverified_context()) # 使用ssl._create_unverified_context()上下文

以上代碼中使用了ssl._create_default_https_context()創建了一個默認的SSL上下文對象,然後給它設置了不進行證書驗證的選項,最後將其傳入urlretrieve的context參數中,從而實現了訪問HTTPS網站的目的。

三、小結

urlretrieve函數是Python爬蟲操作中必不可少的一個函數,其能夠實現下載網絡資源的功能。在使用urlretrieve函數時,我們需要設置一些參數來實現自己的需求。本文介紹了urlretrieve函數的基本用法和常見的參數設置方法,相信大家對這個函數的使用已經有了更深入的了解。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/289174.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:02
下一篇 2024-12-24 03:02

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論