4 روش برای دانلود فایل با پایتون
این روزها دانلود فایل از منابع مختلف آنلاین یکی از مهم ترین و رایج ترین کارهای برنامه نویسی برای انجام در وب است. بسیاری از برنامه های وب که الآن در حال استفاده از آنها هستید اجازه دانلود فایل را به شما میدهند. اگر شما هم نیاز دارید با پایتون برنامهای بنویسید که بتواند فایلها را دانلود کند،در اینجا 4 روش را توضیح خواهیم داد. در اینجا چند نوع برنامه وب که نیاز به دانلود فایل دارند را نام میبریم:
- برنامههای اشتراک گذاری فایل
- برنامههای داده کاوی در وب
- برنامههای واکشی کدهای وبسایتها مانند html, css یا js
- شبکههای اجتماعی
# استفاده از ماژول urllib.request برای دانلود فایل با پایتون
از ماژول urllib.request برای باز کردن یا دانلود فایل از طریق پروتکل HTTP استفاده میشود. به طور خاص متد urlretrieve چیزی است که ما از این ماژول برای دانلود فایل میخواهیم. برای استفاده از متد urlretrieve باید به آن دو آرگومان ارسال کنید: آرگومان اول آدرس صفحهای است که فایل در آن قرار گرفته و آرگومان دوم مسیری است که میخواهید فایل دانلودی را ذخیره کنید.
به مثال زیر دقت کنید:
import urllib.request
print('Beginning file download with urllib2...')
url = 'http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg'
urllib.request.urlretrieve(url, '/Users/scott/Downloads/cat.jpg')
در کد بالا، ابتدا ماژول urllib.request را وارد کردیم. در بخش بعدی یک متغیر به نام url ساخیتم که مسیر فایل دانلودی وجود دارد، است. در آخر متد urlretrieve را با دو آرگومان صدا زدیم. آرگومان اول مسیر فایل آنلاین و آرگومان دوم مسیری است که میخواهیم فایل ذخیره شود. دقت کنید که به عنوان آرگومان دوم هر مسیری را میتوانید وارد کنید، به شرط اینکه اجازه دسترسی به آن مسیر را داشته باشید.
نکته: این روش در پایتون 3 کمتر استفاده میشود و ممکن است در آینده منسوخ شود. پیشنهاد ما اینست که از روش دوم استفاده کنید.
مقاله پیشنهادی: ماژولها و پکیجهای پایتون
# استفاده از ماژول urllib2 برای دانلود فایل با پایتون
روش دیگری که برای دانلود فایل در پایتون استفاده میشود، استفاده از ماژول urllib2 است. متد urlopen که در ماژول urllib2 وجود دارد، آبحکت فایل موجود در مسیر درخواستی را برمیگرداند. برای خواندن فایل از متد read استفاده میکنید. و اگر بخواهید فایل را دانلود کنید، باید با متد write پایتون اینکار را انجام دهید:
import urllib2
filedata = urllib2.urlopen('http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg')
datatowrite = filedata.read()
with open('/Users/scott/Downloads/cat2.jpg', 'wb') as f:
f.write(datatowrite)
متد open مسیر ذخیره فایل و نوع باز کردن فایل را گرفته و تکه تکه فایلهای دانلودی را در آن ذخیره میکند. دقت کنید که نوع باز کردن فایل در متد open باید wb باشد که به شکل باینری فایل را مینویسد.
مقاله پیشنهادی: کار با صدا در پایتون
# استفاده از ماژول requests برای دانلود فایل با پایتون
ماژول دیگری که میتوانید برای دانلود فایل استفاده کنید، ماژول requests است. این ماژول برخلاف دو ماژول قبلی در کتابخانه استاندارد پایتون نبوده و باید با دستور زیر آن را نصب کنید:
pip install requests
متد get ماژول requests برای خواندن محتویات فایلها به شکل باینری استفاده میشود. بعد میتوانید از متد open یک فایل را به شکل باینری باز کرده و محتویات را در آن بنویسید، درست مثل روش قبل:
import requests
print('Beginning file download with requests')
url = 'http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg'
r = requests.get(url)
with open('/Users/scott/Downloads/cat3.jpg', 'wb') as f:
f.write(r.content)
# Retrieve HTTP meta-data
print(r.status_code)
print(r.headers['content-type'])
print(r.encoding)
در کد بالا دوباره از متد open برای نوشتن فایل به شکل باینری استفاده کردیم. با استفاده از ماژول requests همچنین میتوانید به بقیه اطلاعات مربوط به درخواست خود مانند headers و status_code نیز دسترسی داشته باشید. در کد بالا دیدید که چگونه اینکار را انجام دادیم.
این روش برای ارسال اطلاعات نیز استفاده میشود. اگر بخواهید همراه با درخواست خود، اطلاعات دیگری بفرستید باید این اطلاعات را در قالب یک دیکشنری به متد get ارسال کنید:
headers = {'user-agent': 'test-app/0.0.1'}
r = requests.get(url, headers=headers)
مقاله پیشنهادی: پایتون سریعتر با PyPy
# استفاده از ماژول wget برای دانلود فایل با پایتون
یکی از ساده ترین روشهای برای دانلود فایل استفاده از ماژول wget است که نیازی به باز کردن فایل ندارد. این ماژول در کتابخانه استاندارد پایتون نبوده و باید با دستور زیر آن را نصب کنید:
pip install wget
با متد download میتوانید فقط با یک خط فایل مورد نیاز را دانلود کنید:
import wget
print('Beginning file download with wget module')
url = 'http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg'
wget.download(url, '/Users/scott/Downloads/cat4.jpg')
در کد بالا هم مثل قبل، مسیر فایل دانلودی و مسیر ذخیره فایل را مشخص کردیم.
# نتیجه گیری
در این مقاله، چهار مورد از متداولترین روشهای دانلود فایل در پایتون را ارائه کردیم. من شخصا ترجیح می دهم از ماژول requests برای دانلود فایل ها به دلیل ترکیبی از سادگی و قدرت استفاده کنم. با این حال، پروژه شما ممکن است دارای محدودیت هایی باشد که شما را از استفاده از کتابخانه های شخص ثالث باز می دارد، در این صورت من از ماژول urllib2 (برای پایتون 2) یا ماژول urllib.request (برای پایتون 3) استفاده می کنم.