python爬蟲之下載檔案的方式總結以及程式例項
阿新 • • 發佈:2018-12-22
python爬蟲之下載檔案的方式以及下載例項
目錄
第一種方法:urlretrieve方法下載
第二種方法:request download
第三種方法:視訊檔案、大型檔案下載
實戰演示
第一種方法:urlretrieve方法下載
程式示例:
import os from urllib.request import urlretrieve os.makedirs('./img/',exist_ok=True) #建立目錄存放檔案 image_url = "https://p0.ssl.qhimg.com/t01e890e06c93018fa8.jpg" urlretrieve(image_url,'./img1/image1.png') #將什麼檔案存放到什麼位置
補充知識:
os.makedirs() 方法用於遞迴建立目錄。像 mkdir(), 但建立的所有intermediate-level資料夾需要包含子目錄。 語法 makedirs()方法語法格式如下: os.makedirs(path, mode=0o777) 引數 path -- 需要遞迴建立的目錄。 mode -- 許可權模式。 返回值 該方法沒有返回值。
第二種方法:request download
程式示例:
import requests
image_url='https://p0.ssl.qhimg.com/t01e890e06c93018fa8.jpg'
r = requests.get(image_url)
with open('./img1/image1.png','wb') as f:
f.write(r.content)
補充知識:
with open的使用格式 with open(’檔名‘,‘讀寫方式’)as f: f.read() #讀取是整個檔案 f.readline() #讀取第一行 f.readlines() #讀取每一行,可以結合for使用(參考我上述完整程式碼),記得都要帶方法都要帶括號,不然返回的是記憶體地址
f.close() #關閉檔案 檔案使用完畢後必須關閉,因為檔案物件會佔用作業系統的資源,並且作業系統同一時間能開啟的檔案數量也是有限的
f.write() #寫入檔案
第三種方法:視訊檔案、大型檔案下載
可以設定每次儲存檔案的大小,所以可以下載大型檔案,當然也可以下載小檔案。
程式示例:
import requests
image_url = 'https://p0.ssl.qhimg.com/t01e890e06c93018fa8.jpg'
r = requests.get(image_url,stream=True) #stream=True #開啟時時續續的下載的方式
with open(filename, 'wb') as f: for chunk in r,iter_content(chunk_size=32): #chunk_size #設定每次下載檔案的大小
f.write(chunk) #每一次迴圈儲存一次下載下來的內容
實戰演示
下面一個簡單的使用爬蟲下載圖片的程式
爬取的是一個旅遊網站的地圖
程式示例:
import requests import os from bs4 import BeautifulSoup from urllib.request import urlretrieve def main(): url = 'http://www.onegreen.net/maps/List/List_933.html' os.makedirs('./img/',exist_ok=True) #建立目錄存放檔案 html = requests.get(url).text #獲取網頁html soup = BeautifulSoup(html,'lxml') img_url = soup.find_all('img') #獲取所有的img標籤,我在這裡只是演示下載,所有不做進一步的篩選 print(len(img_url)) for url in img_url: ul = url['src'] #獲取src屬性 img = 'http://www.onegreen.net/' + ul #補全圖片url print(img) urlretrieve(img , './img/%s' % ul.split('/')[-1]) #儲存圖片
if __name__ =='__main__':
main()
程式執行結果: