Python الوصول إلى الإنترنت باستخدام Urllib.Request وurlopen()
⚡ ملخص ذكي
urllib هو المعيار Python وحدة للوصول إلى بيانات الإنترنت، مما يسمح للبرامج بفتح URLويمكنها استرجاع محتوى HTML أو JSON أو المحتوى الثنائي. تتصل الدالة urllib.request.urlopen() بعنوان ويب وتقرأ استجابة الخادم مباشرةً في Python.

تشرح الأقسام التالية ماهية مكتبة urllib، وكيفية فتحها URL وقراءة كود HTML الخاص به، وكيفية التعامل مع الأخطاء، وتنزيل الملفات، والاختيار بين مكتبة urllib ومكتبة requests.
ما هو urllib؟
urllib هو أ Python وحدة يمكن استخدامها لفتح URLيُعرّف هذا البرنامج الدوال والفئات للمساعدة في URL الإجراءات.
مع Pythonيمكنك أيضًا الوصول إلى البيانات واسترجاعها من الإنترنت، مثل XML وHTML وJSON، ثم التعامل معها مباشرةً. سنرى في الأقسام التالية كيفية استرجاع البيانات من الويب. على سبيل المثال، سنستخدم هنا... Guru99 الفيديو URL، يمكنك الوصول إليه باستخدام Pythonواطبع ملف HTML الخاص بهذا URL.
تضم حزمة urllib عدة وحدات: urllib.request لفتح URLs، urllib.error للاستثناءات التي قد تثيرها الطلبات، urllib.parse للبناء والتحليل URLs، و urllib.robotparser لقراءة ملفات robots.txt.
كيفية فتح URL باستخدام Urllib
قبل تشغيل الكود للاتصال ببيانات الإنترنت، نحتاج إلى استيراد URL وحدة المكتبة، أو "urllib".
- استيراد urllib
- تحديد وظيفتك الرئيسية
- قم بتعريف المتغير webUrl
- ثم استدعِ الدالة urlopen في مكتبة urllib
- استخدم URL سنفتتح Guru99 درسًا تعليميًا حول YouTube
- بعد ذلك، نقوم بطباعة رمز النتيجة
- يتم استرداد رمز النتيجة عن طريق استدعاء دالة getcode على متغير webUrl الذي أنشأناه
- نقوم بتحويل ذلك إلى سلسلة نصية، بحيث يمكن دمجها مع سلسلة "رمز النتيجة" الخاصة بنا.
- سيكون هذا رمز HTTP عاديًا "200"، مما يشير إلى أن طلب HTTP قد تمت معالجته بنجاح.
كيفية الحصول على ملف HTML من URL in Python
يمكنك أيضًا قراءة ملف HTML باستخدام الدالة read() في Pythonعند تشغيل الكود، سيظهر ملف HTML في وحدة التحكم.
- قم باستدعاء الدالة read() على متغير webUrl
- تتيح لك الدالة read() قراءة محتويات ملفات البيانات
- اقرأ المحتوى الكامل لـ URL في متغير يسمى البيانات
- قم بتشغيل الكود وسيقوم بطباعة البيانات بتنسيق HTML
ها هو الكود الكامل:
Python 2 مثال
# # read the data from the URL and print it # import urllib2 def main(): # open a connection to a URL using urllib2 webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com") #get the result code and print it print "result code: " + str(webUrl.getcode()) # read the data from the URL and print it data = webUrl.read() print data if __name__ == "__main__": main()
Python 3 مثال
# # read the data from the URL and print it # import urllib.request # open a connection to a URL using urllib webUrl = urllib.request.urlopen('https://www.youtube.com/user/guru99com') #get the result code and print it print ("result code: " + str(webUrl.getcode())) # read the data from the URL and print it data = webUrl.read() print (data)
كيفية التعامل مع أخطاء مكتبة urllib: URLخطأ وخطأ HTTP
لا تنجح جميع الطلبات. فعندما يحدث خطأ ما، تُصدر مكتبة urllib استثناءً بدلاً من إرجاع البيانات، لذا من المهم معالجة هذه الأخطاء. يُعرّف مُكوّن urllib.error فئتين رئيسيتين من الاستثناءات.
- خطأ HTTP يتم رفع هذا الاستدعاء عندما يُعيد الخادم رمز حالة خطأ، مثل 404 غير موجود أو 500 خطأ داخلي في الخادم. ويحمل رمز الحالة ونص الاستجابة.
- URLخطأ يُثار هذا الخطأ عندما يتعذر الوصول إلى الخادم نهائياً، على سبيل المثال بسبب اسم نطاق خاطئ أو انقطاع الاتصال بالإنترنت. ويحتوي على سمة "السبب" التي توضح سبب الفشل.
لأن HTTPError هو فئة فرعية من URLفي حالة حدوث خطأ، يجب دائمًا التقاط خطأ HTTP أولاً حتى يتم التعامل مع كل نوع من أنواع الأخطاء بشكل منفصل:
from urllib.request import urlopen from urllib.error import HTTPError, URLError try: response = urlopen("https://www.guru99.com/no-such-page.html") data = response.read() except HTTPError as error: print("HTTP error:", error.code) except URLError as error: print("URL error:", error.reason)
إن معالجة هذه الاستثناءات تمنع برنامجك من التعطل وتتيح لك تسجيل المشكلة، أو إعادة محاولة الطلب، أو الرجوع إلى البيانات المخزنة مؤقتًا.
كيفية تنزيل ملف من URL باستخدام مكتبة urllib
قراءة URL يُعدّ التخزين في الذاكرة مناسبًا للصفحات الصغيرة، ولكن بالنسبة للصور أو ملفات PDF أو مجموعات البيانات، يُفضّل حفظ الاستجابة مباشرةً على القرص. توفر وحدة urllib.request طريقتين بسيطتين للقيام بذلك.
تقوم الدالة urlretrieve() بتنزيل URL مباشرةً إلى ملف محلي في سطر واحد:
from urllib.request import urlretrieve urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")
لمزيد من التحكم، افتح URL واكتب البايتات بنفسك. افتح الملف المحلي في الوضع الثنائي لأن الدالة urlopen() تُرجع بايتات، وليس نصًا.
from urllib.request import urlopen with urlopen("https://example.com/data.zip") as response: with open("data.zip", "wb") as file: file.write(response.read())
بالنسبة للملفات الكبيرة جدًا، اقرأ واكتب في حلقة باستخدام response.read(8192) بحيث لا يتم الاحتفاظ بالملف بأكمله في الذاكرة في وقت واحد.
مكتبة urllib مقابل مكتبة requests في Python
مكتبة urllib هي جزء من Python مكتبة قياسية، لذا فهي تعمل في كل مكان دون تثبيت. مكتبة الطلبات الخارجية غير مدمجة، لكن العديد من المطورين يفضلونها للعمل اليومي مع بروتوكول HTTP لأن صيغتها أقصر وأكثر وضوحًا.
الاختلافات الرئيسية هي:
- تركيب: مكتبة urllib تأتي مع Pythonبينما يجب تثبيت الطلبات باستخدام pip.
- فك: تقوم مكتبة urllib بإرجاع البايتات الخام التي تقوم بفك تشفيرها بنفسك، بينما تقوم مكتبة requests بفك تشفير النصوص و JSON تلقائيًا.
- الراحة: تتعامل مكتبة requests مع الجلسات وملفات تعريف الارتباط والعناوين المخصصة باستخدام كود أقل.
- تبعيات: لا يضيف urllib أي شيء، بينما تعتمد الطلبات على urllib3 في الأساس.
اختر مكتبة urllib عندما لا تحتاج إلى أي تبعيات أو عندما تحتاج فقط إلى طلب سريع لمرة واحدة. اختر مكتبة requests للمشاريع الكبيرة التي تتضمن المصادقة أو الجلسات أو استدعاءات واجهة برمجة التطبيقات المتكررة. ترسل كلتا المكتبتين نفس طلبات HTTP الأساسية، لذا فإن الاختيار يعتمد على سهولة الاستخدام مقابل قائمة تبعيات أصغر.


