اسکریپت دانلود فایل از اینترنت با پایتون: اتوماسیون و اسکریپتنویسی
در دنیای امروز، دانلود فایلها از اینترنت یک فعالیت روزمره است. اما انجام این کار به صورت دستی برای تعداد زیادی فایل میتواند زمانبر و خستهکننده باشد. خوشبختانه، با استفاده از پایتون و کتابخانههای قدرتمند آن، میتوان این فرآیند را به طور کامل خودکار کرد. این مقاله به بررسی روشهای مختلف نوشتن اسکریپت برای دانلود فایلها از اینترنت با پایتون میپردازد و به شما کمک میکند تا با اصول اتوماسیون و اسکریپتنویسی آشنا شوید.
پیشنیازها
قبل از شروع، مطمئن شوید که پایتون روی سیستم شما نصب شده است. همچنین، برای استفاده از برخی از کتابخانهها، ممکن است نیاز به نصب آنها داشته باشید. برای نصب کتابخانهها میتوانید از pip، مدیر بسته پایتون، استفاده کنید. به عنوان مثال، برای نصب کتابخانه requests، دستور زیر را در ترمینال یا خط فرمان وارد کنید:
pip install requests
کتابخانه Requests
کتابخانه Requests یکی از محبوبترین و سادهترین کتابخانهها برای ارسال درخواستهای HTTP در پایتون است. این کتابخانه به شما امکان میدهد تا به راحتی درخواستهای GET، POST، PUT و DELETE را به سرورها ارسال کنید و پاسخهای دریافتی را پردازش کنید. برای دانلود فایلها، معمولاً از درخواست GET استفاده میشود.
دانلود یک فایل ساده
برای دانلود یک فایل ساده، میتوانید از کد زیر استفاده کنید:
import requests
url = "https://example.com/file.txt"
response = requests.get(url)
if response.status_code == 200:
with open("file.txt", "wb") as f:
f.write(response.content)
print("فایل با موفقیت دانلود شد.")
else:
print("خطا در دانلود فایل. کد وضعیت:", response.status_code)
در این کد، ابتدا کتابخانه requests را import میکنیم. سپس، URL فایل مورد نظر را در متغیر url ذخیره میکنیم. با استفاده از تابع requests.get()، یک درخواست GET به URL ارسال میکنیم. اگر کد وضعیت پاسخ 200 باشد (به معنی موفقیتآمیز بودن درخواست)، محتوای پاسخ (response.content) را در یک فایل با نام “file.txt” ذخیره میکنیم. در نهایت، یک پیام موفقیت یا خطا چاپ میکنیم.
دانلود فایل با نام دلخواه
گاهی اوقات ممکن است بخواهید فایل دانلود شده را با نامی متفاوت از نام اصلی آن ذخیره کنید. برای این کار، میتوانید از کد زیر استفاده کنید:
import requests
url = "https://example.com/file.txt"
filename = "my_file.txt"
response = requests.get(url)
if response.status_code == 200:
with open(filename, "wb") as f:
f.write(response.content)
print("فایل با موفقیت دانلود شد.")
else:
print("خطا در دانلود فایل. کد وضعیت:", response.status_code)
در این کد، نام فایل مورد نظر را در متغیر filename ذخیره میکنیم و سپس آن را به عنوان نام فایل در تابع open() استفاده میکنیم.
دانلود فایلهای بزرگ
برای دانلود فایلهای بزرگ، بهتر است از روش Streaming استفاده کنید تا از بارگذاری کل فایل در حافظه جلوگیری شود. با استفاده از Streaming، فایل به صورت قطعه قطعه دانلود میشود و هر قطعه بلافاصله در فایل ذخیره میشود. کد زیر نشان میدهد که چگونه میتوان یک فایل بزرگ را با استفاده از Streaming دانلود کرد:
import requests
url = "https://example.com/large_file.zip"
filename = "large_file.zip"
response = requests.get(url, stream=True)
if response.status_code == 200:
with open(filename, "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
print("فایل با موفقیت دانلود شد.")
else:
print("خطا در دانلود فایل. کد وضعیت:", response.status_code)
در این کد، پارامتر stream=True را به تابع requests.get() اضافه میکنیم تا Streaming فعال شود. سپس، با استفاده از حلقه for و تابع response.iter_content()، فایل را به صورت قطعه قطعه (chunk) دانلود میکنیم و هر قطعه را در فایل ذخیره میکنیم. اندازه هر قطعه با پارامتر chunk_size تعیین میشود.
کتابخانه urllib.request
کتابخانه urllib.request یک کتابخانه استاندارد پایتون است که برای ارسال درخواستهای HTTP استفاده میشود. این کتابخانه نسبت به کتابخانه Requests پیچیدهتر است، اما نیازی به نصب اضافی ندارد.
دانلود یک فایل ساده با urllib.request
برای دانلود یک فایل ساده با استفاده از urllib.request، میتوانید از کد زیر استفاده کنید:
import urllib.request
url = "https://example.com/file.txt"
filename = "file.txt"
urllib.request.urlretrieve(url, filename)
print("فایل با موفقیت دانلود شد.")
در این کد، از تابع urllib.request.urlretrieve() برای دانلود فایل استفاده میکنیم. این تابع URL فایل و نام فایل را به عنوان ورودی میگیرد و فایل را دانلود میکند.
مدیریت خطاها
هنگام دانلود فایلها از اینترنت، ممکن است با خطاها و مشکلاتی مواجه شوید. برای مثال، ممکن است URL فایل اشتباه باشد، سرور در دسترس نباشد، یا اتصال اینترنت قطع شود. برای مدیریت این خطاها، میتوانید از بلوکهای try-except استفاده کنید.
import requests
url = "https://example.com/file.txt"
filename = "file.txt"
try:
response = requests.get(url)
response.raise_for_status() # بررسی کد وضعیت و ایجاد خطا در صورت لزوم
with open(filename, "wb") as f:
f.write(response.content)
print("فایل با موفقیت دانلود شد.")
except requests.exceptions.RequestException as e:
print("خطا در دانلود فایل:", e)
در این کد، درخواست دانلود فایل را در بلوک try قرار میدهیم. اگر در طول فرآیند دانلود خطایی رخ دهد، بلوک except اجرا میشود و پیام خطا چاپ میشود. تابع response.raise_for_status() کد وضعیت پاسخ را بررسی میکند و اگر کد وضعیت نشاندهنده خطا باشد (مثلاً 404 Not Found یا 500 Internal Server Error)، یک استثنا ایجاد میکند.
دانلود چند فایل به صورت همزمان
برای دانلود چند فایل به صورت همزمان، میتوانید از کتابخانه threading استفاده کنید. با استفاده از threading، میتوانید چندین thread ایجاد کنید که هر کدام مسئول دانلود یک فایل باشند. این کار باعث میشود که فرآیند دانلود فایلها سریعتر انجام شود.
(به دلیل طولانی بودن کد، مثال دانلود چند فایل به صورت همزمان در این مقاله ارائه نمیشود، اما میتوانید با جستجو در اینترنت، نمونههای مختلفی از این کد را پیدا کنید.)
نتیجهگیری
در این مقاله، به بررسی روشهای مختلف نوشتن اسکریپت برای دانلود فایلها از اینترنت با پایتون پرداختیم. با استفاده از کتابخانههای Requests و urllib.request، میتوانید به راحتی فایلها را دانلود کنید و فرآیند دانلود را به طور کامل خودکار کنید. همچنین، با استفاده از مدیریت خطاها و threading، میتوانید اسکریپتهای قویتر و کارآمدتری ایجاد کنید. اتوماسیون دانلود فایلها تنها یکی از کاربردهای اسکریپتنویسی با پایتون است و با یادگیری این مهارت، میتوانید بسیاری از کارهای تکراری و زمانبر خود را به طور خودکار انجام دهید.

بدون دیدگاه