Python 使用爬蟲批次下載網頁圖片 (Python Using Requests download imgae files)


  1. 說明
    1. Modules
    2. 獲得圖片的連結
    3. datas.py
    4. Main
  2. 無法由網址預知副檔名的情境
    1. datas.py
    2. Main
  3. 參考資料

筆記拋棄式的簡單爬蟲腳本,示範如何實作批次下載網頁圖片、自動抓圖與下載檔案,達到自動化作業的目的。同時也會使用到爬蟲常用的套件、模組,例如 requests 的安裝方式與使用介紹。

logo

說明

Modules

使用的模組包含 requests, os,其中 datas 為自定義的 python module,內容為要迭代查詢的 URL 集合。

pip install requests

獲得圖片的連結

對網頁 Html 進行處理,搭配 Beautiful Soup 取出所有 Html 中的 Img Element,再進行加入至 list 提供迭代下載圖片使用。

from bs4 import BeautifulSoup

response = requests.get('https://URL')
soup = BeautifulSoup(response.content, 'html.parser')

datas = []

for i in soup.find_all('img'):
  datas.append(i.attrs['src'])

datas.py

datas = [
    'https://via.placeholder.com/300.png',
    'https://via.placeholder.com/300.jpg',
    'https://via.placeholder.com/300.gif',
]

Main

count 為檔名的流水編號,本次以 1024 開始做遞減,另藉由 os Module 將作業目錄切換到要儲存圖片的位置。

開始迭代 datas list 物件,藉由 requests.get 取得圖片內容,並識別副檔名 (extension),識別的方式是網址分割英文句號「.」後的最後一組資料。

import requests
import os
import datas

count = 1024
os.chdir(r'C:\Downlaods')

for url in datas.datas:
  img = requests.get(url)
  extension = url.split('.')[-1]

  with open(f"{start}.{extension}", "wb") as f:
    f.write(img.content)
    f.close()

  start -= 1

無法由網址預知副檔名的情境

datas.py

datas = [
    'https://via.placeholder.com/300',
    'https://via.placeholder.com/450',
]

Main

藉由 Header 的 Content/Type 來識別 extension

for url in datas.datas:
  img = requests.get(url)
  contentType = img.headers['Content-Type']
  # image/png

  extension = contentyType.split('/')[-1]

參考資料

Python Modules - Requests