هل تعلم أنه يمكنك تنزيل ملف برمجيًا في بايثون؟ سأوضح لك كيفية جلب ملف وحفظه في بايثون. تُعرف هذه العملية باسم تجريف الويب وهي خطوة أساسية في أي مشروع متعلق بالبيانات.
تجريف ويب هي عملية جمع البيانات من موقع الويب. على الرغم من أنه يمكن للمستخدم القيام بذلك يدويًا، إلا أنه يشير عادةً إلى طريقة تلقائية لجمع البيانات بمساعدة زاحف الويب.
يمكنك القيام بكل هذا برمجياً في بايثون. بنهاية هذه المقالة، ستعرف كيفية تحميل أي نوع من الملفات في بايثون، بما في ذلك ملفات PDF والصور ومقاطع الفيديو والصفحات. العملية متشابهة بين أنواع مختلفة من الملفات.
للحصول على أقصى استفادة من هذه المقالة، من الجيد أن يكون لديك فهم أساسي للبرمجة في بايثون.
لتحميل ملف في بايثون، نحتاج إلى إحضاره وحفظه. يمكن إجراء هذه العملية عن طريق الاتصال بواجهة برمجة التطبيقات (API) أو باستخدام عنوان URL عادي على الويب يشير إلى ملف GIF الذي تريده.
قبل المضي قدمًا، دعونا نفهم REST API وهي خدمة تتيح لك الوصول إلى البيانات ومعالجتها مثل الملفات النصية والصور والخدمات ومجموعات الموارد الأخرى الموجودة على الخادم عبر آليات REST. تساعد واجهة برمجة التطبيقات (API) على تحسين إمكانية نقل تطبيقات العميل وتسهل عملية تطوير المكونات المختلفة للمنتج. عادةً ما تُرجع واجهات برمجة التطبيقات هذه كائنات JSON المشفرة بترميز UTF-8 كمورد.
هناك خطوتان أساسيتان لتقديم طلب عند العمل مع REST APIs. أولاً، يصل العميل إلى موقع محدد على REST API ويذكر الطريقة التي سيتم تنفيذها. ويعرف هذا بالطلب. ثانيًا، ينفذ الخادم الطريقة ويعيد البيانات إلى العميل. وهذا ما يعرف بالرد.
المصادقة هي عنصر حاسم في أمن الإنترنت. يجب أن يكون لدى أي REST API التي تتيح للعملاء الوصول إلى البيانات الحساسة أو الهامة أو تعديلها نظام مصادقة. حتى لو كانت واجهة برمجة التطبيقات (API) مجانية، فقد يقدم المالك مصادقة للحد من عدد الطلبات لكل مستخدم.
في هذا الدرس سنقوم بإحضار الملفات وحفظها من PLACE.DOG وRANDOMFOX.CA. لا يلزم إجراء مصادقة، لذا يمكنك إعادة استخدام الأكواد لتنزيل ملف في بايثون. يمكنك العثور على قائمة بواجهات برمجة التطبيقات العامة هنا.
أولاً، سنقوم بتنزيل ملف بلغة بايثون عبر HTTP. لاحقًا، سنقوم بتنزيل ملف من واجهة برمجة التطبيقات (API).
تنزيل ملف في بايثون عبر HTTP
في المثال الأول، سنقوم بإحضار صورة كلب وحفظها. يقدم هذا الموقع صورًا عشوائية للكلاب يمكنك استخدامها كعناصر نائبة لمشروعك القادم. إذا قمت بتحديث الصفحة، فسيتم إنشاء صورة كلب أخرى.
سنستخدم مكتبة REQUESTS، التي تجعل طلبات HTTP أسهل من استخدام مكتبة urllib
المضمنة. قد يتعين عليك تثبيت مكتبة requests
باستخدام الأمر التالي:
pip install requests
بعد ذلك، نقوم باستيراد requests
، وتعيين متغير url
باستخدام عنوان URL المستهدف، وكتابة طلب GET
والتحقق من حالته. فيما يلي الأنواع المختلفة لحالة الاستجابة التي قد تواجهها عند كتابة طلب GET
:
- 1xx Informational. يشير إلى أنه تم استلام طلب ويجب على العميل الاستمرار في تقديم طلبات لحمولة البيانات.
- 2xx Successful. يشير إلى أنه تم استلام الإجراء المطلوب وفهمه وقبوله. يساعدك على التحقق من وجود البيانات قبل العمل عليها.
- 3xx Redirection. يشير إلى أنه يجب على العميل اتخاذ إجراء إضافي لإكمال الطلب، مثل استخدام وكيل أو نقطة نهاية مختلفة للوصول إلى الموارد.
- 4xx Client Error. يشير إلى مشاكل مع العميل، على سبيل المثال، الأساليب غير المسموح بها، أو مشكلات الترخيص، أو الوصول المحظور، أو محاولات الوصول إلى الموارد غير الموجودة.
- خطأ في الخادم 5xx. يشير إلى وجود مشاكل في الخادم الذي يوفر واجهة برمجة التطبيقات (API).
لنكتب طلبًا لجلب ملف في بايثون.
>>> import requests
>>> url = 'https://place.dog/300/200'
>>> # fetch file
>>> response = requests.get(url, allow_redirects=True)
>>> # Get response status
>>> response.status_code
200
يشير رمز الحالة 200
إلى نجاح الطلب ووجود البيانات. من هناك، نواصل إلى الخطوة التالية ونحفظ ملفًا في بايثون بمساعدة التابع write()
.
الآن، تم حفظ الملف بتنسيق dog1.jpg ويحتوي على صورة كلب.
لتجديد معلوماتك عن التابع write()
لحفظ ملف في Python، راجع مقالتي حول كيفية الكتابة إلى الملف في بايثون.
تنزيل ملف في بايثون من API
الآن، دعنا نستكشف كيفية جلب ملف وحفظه في بايثون عن طريق استدعاء واجهة برمجة التطبيقات (API) وتحليل ملف JSON. وعلى عكس ما فعلناه سابقًا، سنقوم بحفظ الملف باستخدام PATHLIB.
معظم البيانات المتاحة عبر الإنترنت موجودة في شكل JSON (JavaScript Object Notation). يتم استخدامه لتخزين المعلومات في قواعد البيانات وهو نوع البيانات الأكثر شيوعًا الذي ستجده عند العمل مع واجهات برمجة تطبيقات REST الحديثة. قد تكون هياكل بيانات JSON عبارة عن أزواج اسم وقيمة غير مرتبة، مثل القواميس أو جداول التجزئة أو الكائنات أو القوائم ذات المفاتيح اعتمادًا على لغة البرمجة، أو قائمة مرتبة من القيم مثل المصفوفات والقوائم والمتجهات.
قد يكون من الصعب على البشر قراءة JSON واستخدامه مباشرة. لدى بايثون مكتبات مختلفة لمساعدتنا في قراءة بيانات JSON التي تم جلبها من الويب. من بينها مكتبة JSON مع دعم مدمج لتحويل مكونات JSON إلى كائنات بايثون الأصلية. يوضح الجدول التالي تعيين التحويل بين JSON وبايثون:
JSON | Python |
---|---|
object | dictionary |
array | List or tuple |
string | string |
number | Integer or float |
true | True |
false | False |
null | None |
يتعين عليك التعامل مع بيانات JSON كثيرًا عند العمل مع REST APIs.
تحتوي مكتبة requests
على العديد من الميزات، لكننا نحتاج فقط إلى طلب GET
ومنسق json()
للمثال التالي. كما فعلنا سابقًا، الخطوة الأولى هي استيراد مكتبة requests
. بعد ذلك، نقوم بإنشاء طلب GET
إلى نقطة نهاية API التي نريد الوصول إليها. توفر واجهة برمجة التطبيقات (API) كائن استجابة يتضمن بيانات JSON. نحن مهتمون فقط ببيانات JSON، التي يتم إرجاعها باستخدام وحدة json()
.
>>> import requests
>>> url = "https://randomfox.ca/floof"
>>> # fetch file
>>> response = requests.get(url, allow_redirects=True)
>>> # get json data
>>> json = response.json()
>>> print(json)
{'image': 'https://randomfox.ca/images/2.jpg', 'link': 'https://randomfox.ca/?i=2'}
تشبه نتيجة json قاموس بايثون. نقوم باستخراج عنوان URL للصورة على النحو التالي:
>>> img = json['image']
>>> print(img)
https://randomfox.ca/images/2.jpg
بعد ذلك، نريد حفظ الصورة. كما ذكرنا سابقًا، نستخدم pathlib، وهو إطار عمل موجه للكائنات للتعامل مع مسارات نظام الملفات. إحدى مزاياه هي إمكانية النقل الأفضل بين أنظمة التشغيل.
لحفظ صورة الثعلب الخاص بنا، سنستخدم طريقة PATH.WRITE_BYTES(DATA)
لفتح المسار في الوضع الثنائي/البايت وكتابة البيانات إليه.
>>> # import Path class from pathlib
>>> from pathlib import Path
>>> # define filename
>>> filename = Path('fox.jpg')
>>> # fetch file
>>> response = requests.get(img)
>>> # save file
>>> filename.write_bytes(response.content)
تم الآن حفظ ملفنا بتنسيق fox.jpg. لقد رأينا للتو كيفية استخراج عنوان URL في استجابة واجهة برمجة التطبيقات (API) من خلال فحص بيانات json.
لقد تعلمنا الآن كيفية تنزيل ملف في بايثون عبر HTTP ومن واجهة برمجة التطبيقات (API). أنا أشجعك على اللعب بالكود وجلب الملفات من واجهات برمجة التطبيقات المختلفة.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.