كتابة سكربت لتحميل الملفات من الإنترنت باستخدام urllib في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 19 ديسمبر 2024

محتوى المقال

كتابة سكربت لتحميل الملفات من الإنترنت باستخدام urllib في Python

في هذا المقال، سنتعلم كيفية كتابة سكربت بسيط لتحميل الملفات من الإنترنت باستخدام مكتبة urllib في لغة Python. يعد تحميل الملفات من الإنترنت من المهام الشائعة التي قد يحتاجها المطورون في تطبيقاتهم. سنقوم بتغطية الجوانب الأساسية التي تمكنك من فهم كيفية عمل هذا السكربت، بالإضافة إلى شرح بعض المفاهيم المتقدمة التي قد تكون مفيدة.

ما هي مكتبة urllib؟

مكتبة urllib هي مكتبة مدمجة في Python تُستخدم للتعامل مع عمليات URL مثل استرجاع البيانات من الإنترنت، إرسال البيانات، والعمل مع بروتوكولات HTTP. يمكننا استخدام urllib لتحميل الملفات، قراءة محتوى الصفحات، وحتى إرسال الطلبات POST.

وحدة urllib.request

الوحدة urllib.request هي جزء من مكتبة urllib وتوفر واجهة برمجية لتنفيذ الطلبات إلى الإنترنت، سواء كانت GET أو POST. هذه الوحدة مفيدة جدًا عند الحاجة إلى تحميل الملفات من الإنترنت، حيث أنها توفر دالة سهلة الاستخدام تُدعى urlretrieve لتحميل الملفات مباشرة.

كتابة سكربت لتحميل الملفات باستخدام urllib

الآن، دعونا ننتقل إلى الجزء العملي حيث سنقوم بكتابة سكربت بسيط لتحميل الملفات. سنبدأ بالخطوات الأساسية، ثم نضيف بعض الميزات المفيدة.

الخطوات الأساسية لتحميل ملف

لتحميل ملف من الإنترنت، يمكننا استخدام الدالة urlretrieve من urllib.request. هذه الدالة تأخذ معلمتين رئيسيتين: عنوان URL للملف الذي نرغب في تحميله، واسم الملف المحلي الذي نريد حفظه به.

import urllib.request

url = "https://example.com/file.zip"
filename = "downloaded_file.zip"

urllib.request.urlretrieve(url, filename)
print("Download complete!")

في هذا المثال البسيط، يقوم السكربت بتحميل ملف ZIP من عنوان URL المحدد ويحفظه باسم downloaded_file.zip. بعد الانتهاء من التحميل، يعرض رسالة تفيد بأن التحميل قد اكتمل.

إضافة دعم لمعالجة الأخطاء

من الأفضل دائمًا إضافة معالجة للأخطاء للتأكد من أن السكربت يتعامل بشكل صحيح مع أي مشكلات قد تحدث أثناء التحميل، مثل فشل الاتصال بالإنترنت أو عنوان URL غير صحيح.

import urllib.request
import os

def download_file(url, filename):
    try:
        urllib.request.urlretrieve(url, filename)
        print("Download complete!")
    except urllib.error.URLError as e:
        print("Failed to download: ", e.reason)
        if os.path.exists(filename):
            os.remove(filename)

url = "https://example.com/file.zip"
filename = "downloaded_file.zip"

download_file(url, filename)

في هذا المثال، قمنا بإنشاء دالة download_file التي تحاول تحميل الملف. إذا فشل التحميل، يتم طباعة رسالة خطأ وإزالة أي ملف تم تحميله جزئيًا.

متابعة تقدم التحميل

في بعض الحالات، قد يكون من المفيد متابعة تقدم التحميل، خاصة عند تحميل ملفات كبيرة. يمكننا استخدام دالة مخصصة لتحديث المستخدم بتقدم التحميل.

import urllib.request

def download_file_with_progress(url, filename):
    def progress(block_num, block_size, total_size):
        downloaded = block_num * block_size
        if total_size > 0:
            percent = downloaded / total_size * 100
            print("Downloaded {:.2f}%".format(percent))
        else:
            print("Downloaded {} bytes".format(downloaded))

    urllib.request.urlretrieve(url, filename, reporthook=progress)
    print("Download complete!")

url = "https://example.com/file.zip"
filename = "downloaded_file.zip"

download_file_with_progress(url, filename)

في هذا المثال، أضفنا دالة progress التي تعرض نسبة التقدم أثناء تحميل الملف. يتم استدعاء هذه الدالة تلقائيًا بواسطة urlretrieve عند تحميل كل كتلة من البيانات.

مقارنة بين مكتبات Python لتحميل الملفات

إلى جانب urllib، هناك مكتبات أخرى مثل requests التي يمكن استخدامها لتحميل الملفات من الإنترنت. requests هي مكتبة أكثر بساطة ومرونة، لكن urllib تأتي مدمجة مع Python ولا تتطلب تثبيتات إضافية.

  • requests: سهلة الاستخدام وتدعم تحميل الملفات بشكل مباشر، لكنها تتطلب التثبيت.
  • urllib: مدمجة مع Python ومناسبة للمشاريع التي تحتاج إلى استخدام مكتبات مدمجة فقط.

الخلاصة

تعلمنا في هذا المقال كيفية كتابة سكربت لتحميل الملفات من الإنترنت باستخدام urllib في Python. لقد غطينا الأساسيات مثل تحميل الملفات البسيط، إضافة معالجة الأخطاء، وتطبيق ميزة تتبع تقدم التحميل. على الرغم من أن urllib قوية ومرنة، إلا أنه يمكن استخدام مكتبات أخرى مثل requests لتحميل الملفات بطريقة أبسط إذا كنت تبحث عن تجربة برمجة أكثر مرونة.

طور مهاراتك: مقالات يجب قراءتها في البرمجة