كيفية تنزيل ملف من الويب في Python 3 باستخدام عنوان URL مخزّن في سلسلة
عند محاولة تنزيل ملف من ملف خادم الويب في Python 3، قد يؤدي تمرير سلسلة كعنوان URL إلى حدوث خطأ يتطلب إدخال وحدات البايت. تقدم هذه المقالة عدة طرق للتحايل على هذه المشكلة واسترداد الملف بنجاح.
باستخدام urllib.request.urlopen
للحصول على محتويات صفحة ويب، استخدم urllib .request.urlopen(). تقوم هذه الدالة بإرجاع كائن استجابة، والذي يمكن بعد ذلك قراءته في متغير:
import urllib.request
url = 'http://example.com/'
response = urllib.request.urlopen(url)
data = response.read() # a `bytes` object
استخدام urlib.request.urlretrieve
الطريقة الأكثر مباشرة لتنزيل ملف وحفظه هي الاستفادة منه وظيفة urllib.request.urlretrieve:import urllib.request
url = 'http://example.com/file.txt'
urllib.request.urlretrieve(url, 'file.txt')
تقوم هذه الطريقة بتنزيل الملف من عنوان URL المحدد وحفظه محليًا باسم 'file.txt'.استخدام urlib.request.urlopen مع Shutil.copyfileobj
لمزيد من التحكم في عملية التنزيل، استخدم urllib.request.urlopen() لإرجاع كائن يشبه الملف. يمكن بعد ذلك نسخ هذا الكائن إلى ملف حقيقي باستخدام Shutil.copyfileobj():import urllib.request
import shutil
url = 'http://example.com/file.zip'
with urllib.request.urlopen(url) as response, open('file.zip', 'wb') as out_file:
shutil.copyfileobj(response, out_file)
تخزين التنزيل بالبايت
إذا كانت السرعة هي الأولوية، فيمكن تخزين البيانات التي تم تنزيلها مباشرة في كائن بايت وبالتالي مكتوبًا في ملف، على الرغم من أن هذا مناسب فقط للملفات الصغيرة:import urllib.request
url = 'http://example.com/icon.png'
with urllib.request.urlopen(url) as response, open('icon.png', 'wb') as out_file:
data = response.read() # a `bytes` object
out_file.write(data)
يمكن أيضًا استخدام التعامل مع الملفات المضغوطةurllib.request.urlopen() للتعامل مع الملفات المضغوطة، بشرط أن يدعم الخادم الوصول العشوائي:
استيراد urllib.request استيراد gzip عنوان URL = "http://example.com/archive.gz" مع urllib.request.urlopen(url) كرد: مع gzip.GzipFile(fileobj=response) غير مضغوط: file_header = uncompressed.read(64) # كائن `بايت`
import urllib.request
import gzip
url = 'http://example.com/archive.gz'
with urllib.request.urlopen(url) as response:
with gzip.GzipFile(fileobj=response) as uncompressed:
file_header = uncompressed.read(64) # a `bytes` object
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3