۳ روش ساده برای دانلود فایلها با Python
۶ بهمن ۱۳۹۹
در این مقاله تصمیم داریم تا با توسعهی یک اسکریپت Python و برخی کتابخانههای استاندارد این زبان یک فایل را به سه روش از اینترنت دانلود کنیم.
۱) urllib.request.urlretrieve
کتابخانه urllib در زبان Python طیف وسیعی از توابع را برای مدیریت کارهای معمول مرتبط با URL طراحی کرده است که شامل parsing، requesting و دانلود فایلها میشود. حال سعی بر این است که با استفاده از این کتابخانه، فایل robots.txt
در سایت google.com را دانلود کنیم:
from urllib import request
# Define the remote file to retrieve
remote_url = 'https://www.google.com/robots.txt'
# Define the local filename to save data
local_file = 'local_copy.txt'
# Download remote and save locally
request.urlretrieve(remote_url, local_file)
پس از اجرای کدهای بالا، فایل local_copy.txt
را مشاهده خواهید کرد. البته توجه داشته باشید بر اساس مستندات Python ممکن است urlretrieve
در آینده منسوخ شود اما زمان دقیق آن مشخص نیست.
۲) requests.get
requests یک کتابخانه فوقالعاده و بسیار human-friendly برای کار با HTTP در زبان Python است. بااینحال برای دانلود فایل بایستی در ابتدا دادههای فایل را دریافت کرده و سپس محتوای آن را بهصورت فایل ذخیره کنید:
import requests
# Define the remote file to retrieve
remote_url = 'https://www.google.com/robots.txt'
# Define the local filename to save data
local_file = 'local_copy.txt'
# Make http request for remote file data
data = requests.get(remote_url)
# Save file data to local copy
with open(local_file, 'wb')as file:
file.write(data.content)
یکی از جنبههای مهم که باید آن را بهخاطر بسپارید، انتقال دادههای فایل با فرمت باینری در این رویکرد است اما زمانی که یک مرورگر وب، یک صفحه یا فایل را بارگیری میکند، آن فایل با استفاده از رمزنگاری مشخص شدهای مانند UTF-8 و Latin-1 رمزنگاری میشود و نتیجه این کار مرورگر را قادر میسازند تا فایل را پس از دریافت به کاربر نمایش دهد.
۳) wget.download
با استفاده از کتابخانه wget در Python میتوانیم با روشی مشابه urllib فایل مورد نظر خود را دانلود کنیم و همچنین این کتابخانه بهدلیل شباهت با دستور wget در Linux توجه بسیار زیادی را به خود جلب کرده است. البته باید توجه داشته باشید که این ماژول آخرین بار در سال ۲۰۱۵ بهروزرسانی شده است:
import wget
# Define the remote file to retrieve
remote_url = 'https://www.google.com/robots.txt'
# Define the local filename to save data
local_file = 'local_copy.txt'
# Make http request for remote file data
wget.download(remote_url, local_file)
فانکشن wget.download
ترکیبی از urllib، tempfile و shutil بهحساب میآید زیرا روند بازیابی دادههای بارگیری شده، ذخیره در یک فایل موقت، انتقال آن فایل و تغییر نام آن به مسیر مشخص شده با همین فانکشن انجام میشود.
جمعبندی
دانلود فایل با استفاده از کتابخانههای استانداردی مانند urllib
در زبان Python بسیار ساده است. همچنین کتابخانههایی مانند requests وجود دارند که سادهترین روش برای کار با API و درخواستهای HTTP را در ارائه میدهند اما باید توجه داشته باشید که قابلیتی مانند URL parsing در urllib ارائه میشود و این قابلیت در کتابخانه requests وجود ندارد.
منبع: https://medium.com/better-programming/3-simple-ways-to-download-files-with-python-569cb91acae6
توسعهدهندگان دربارهی ما چه میگویند
تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...
MohammadReza
keikaavousi
بعد از بسته شدن @fandoghpaas و ناراحتی همهمون از اینکه یه سرویس خوب و صادق نمیتونه از پس هزینهها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوتهایی داشت که کمی کار میخواست ولی تا الان کاملا راضی.
jadi
jadi
یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.
Arch
EbadiDev
واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیتهای سرویس دیتابیسشون اینه که خودشون به صورت دورهای بکآپ میگیرن.
...
Ali Najafi
me_ali_najafi
یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@
Navid
1navid
عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم
Amir H Shekari
vanenshi