3 روش برای دانلود تصاویر با پایتون
پایتون برای کار با صفحات وب بسیار قدرتمند است. برای کار با تصاویری که در وبسایت ها وجود دارد، پایتون ابزارهای زیادی دارد. در این مقاله، چندین روش مختلف برای دانلود تصاویر با پایتون را به شما نشان خواهیم داد.
دوره پیشنهادی: دوره آموزش پایتون (python)
# دانلود تصویر با استفاده از کتابخانه requests
به عنوان محبوب ترین ابزار HTTP در پایتون، پکیج Requests برای مبتدیان بسیار زیبا و آسان است. بسیاری از توسعه دهندگان آن را روشی مناسب برای دانلود هر نوع فایل در پایتون می دانند. برای نصب این کتابخانه میتوانید از دستور زیر استفاده کنید:
pip install requests
با فرض اینکه پایتون 3 را نصب دارید، یک دایرکتوری به نام download-images-python ایجاد کرده و یک فایل به نام requests_python_img_dl.py اضافه کنید. پس از باز شدن آن فایل، کتابخانه های زیر را نصب و وارد کنید:
import requests # request img from web
import shutil # save img locally
بعد از ایمپورت کردن کتابخانه ها، یک متغیر url ایجاد کرده و آدرس وبی که کاربر میخواهد از آن تصویر را دانلود کند میگیرد:
url = input('Please enter an image URL (string):') #prompt user for img url
علاوه بر این، متغیر دیگری را ایجاد کنید که نام فایلی است که کاربر میخواهد تصویر را ذخیره کند:
file_name = input('Save image as (string):') #prompt user for file name
در خط بعدی، متد get را از ماژول requests برای بازیابی تصویر استفاده می کنیم. این متد دارای دو پارامتر است، متغیر url که قبلاً ایجاد کردیم، و stream = True که با افزودن این آرگومان مطمئن میشوید که هیچ وقفه در زمان اجرای این متد اتفاق نمی افتد:
res = requests.get(url, stream = True)
متد copyfileobj از ماژول shutil برای ذخیره فایل در سیستم کاربر استفاده میشود. قبل از انجام هر کاری بهتر است ابتدا بررسی کنیم که آیا درخواستی که برای بازیابی تصویر ارسال کرده بودیم موفقیت آمیز بوده یا نه:
if res.status_code == 200:
with open(file_name,'wb') as f:
shutil.copyfileobj(res.raw, f)
print('Image sucessfully Downloaded: ',file_name)
else:
print('Image Couldn\'t be retrieved')
در آخر اسکریپت شما باید به شکل زیر باشد:
import requests # request img from web
import shutil # save img locally
url = input('Please enter an image URL (string):') #prompt user for img url
file_name = input('Save image as (string):') #prompt user for file_name
res = requests.get(url, stream = True)
if res.status_code == 200:
with open(file_name,'wb') as f:
shutil.copyfileobj(res.raw, f)
print('Image sucessfully Downloaded: ',file_name)
else:
print('Image Couldn\'t be retrieved')
و کدتان را با ترمینال اجرا کنید. بعد از اجرای این کد، تصویر دانلودی در دایرکتوری که ساخته بودید ذخیره خواهد شد:
python requests_python_img_dl.py
دوره پیشنهادی: دوره آموزش web scraping در پایتون
# دانلود تصویر با استفاده از کتابخانه urllib
یکی دیگر از روش های مورد علاقه توسعه دهندگان برای دانلود داده ها در پایتون از پکیج urllib است، پکیجی که چندین ماژول را برای کار با URL ها جمع آوری می کند، از جمله:
- urllib.request برای باز کردن و خواندن url ها
- urllib.parse برای تجزیه url ها
- urllib.error برای پیغام های خطایی که توسط urllib.parse ایجاد میشوند
- urllib.robotparser برای تجزیه فایل ها robots.txt
برای کسب اطلاعات بیشتر در مورد ماژول urllib، به مستندات مراجعه کنید، اما اکنون که اصول اولیه را میدانید وقت آن است که شروع کنید! برای نصب این پکیج میتوانید از دستور زیر استفاده کنید:
pip install urllib
بعد از نصب این پکیج، یک دایرکتوری به نام python-image-downloads ساخته و داخل آن یک فایل به نام dl_img.py بسازید. داخل این فایل ماژول urllib را ایمپورت کنید:
import urllib.request
باز هم مانند بخش قبل، از کاربر url درخواستی و نام فایلی که میخواهد فایل دانلودی را ذخیره کنید، میگیریم:
url = input('Please enter image URL (string):')
file_name = input('Save image as (string):')
سپس یک فانکشن ساخته و مسیری دانلود و ذخیره تصویر را به متد urlretrieve ارسال میکنیم:
def download_image(url, file_path, file_name):
full_path = file_path + file_name + '.jpg'
urllib.urlretrieve(url, full_path)
حالا تمام کد شما باید به شکل زیر باشد:
import urllib.request
def download_image(url, file_path, file_name):
full_path = file_path + file_name + '.jpg'
urllib.urlretrieve(url, full_path)
url = input('Please enter image URL (string):')
file_name = input('Save image as (string):')
download_image(url, 'images/', file_name)
حالا میتوانید کدتان را اجرا کنید و تصاویری میخواهید را دانلود کنید. تصاویری که دانلود میکنید در دایرکتوری جدیدی که ایجاد کردید قرار میگیرند:
python dl_img.py
ویدیو پیشنهادی: آموزش کلاسهای تودرتو در پایتون
# دانلود تصویر با استفاده از کتابخانه wget
علاوه بر پکیج های Requests و Urllib، امکان دانلود تصاویر در پایتون با استفاده از ماژول wget نیز وجود دارد. در دایرکتوری قبلی یک فایل wget_img_dl.py ایجاد کنید و ماژول wget را به صورت زیر وارد کنید:
import wget
هنگامی که wget را نصب و وارد کردید، یک متغیر url برابر با یک عبارت ورودی تنظیم کنید که یک آدرس تصویر را اختصاص می دهد:
url = input('Please enter image URL (string):')
متد wget.download یک آدرس وب گرفته و آن را در متغیر file_name ذخیره میکنیم:
file_name = wget.download(url)
print('Image Successfully Downloaded: ', file_name)
حالا کل اسکریپت شما باید به شکل زیر باشد:
import wget
url = input('Please enter image URL (string):')
file_name = wget.download(url)
print('Image Successfully Downloaded: ', file_name)
حالا میتوانید کدتان را اجرا کرده و تصاویرتان را دانلود کنید:
python wget_img_dl.py
# نتیجه گیری
مثل همیشه، هر یک از این روش ها مزایا و معایبی دارد. اگر در نصب بسته Requests مشکل دارید یا می خواهید وابستگی های کمتری در برنامه خود داشته باشید urllib ممکن است بهترین گزینه شما باشد. با این حال، ماژول Requests به روشی محبوب و قابل اعتماد برای دانلود هر چیزی در پایتون تبدیل شده است، حتی اسناد urllib آن را به عنوان رابط HTTP سطح بالا توصیه می کند.