مكشطة صور Python ليست مجرد أداة لشحذ مهارات البرمجة الخاصة بك. يمكنك أيضًا استخدامه لمصدر الصور لمشروع التعلم الآلي ، أو إنشاء صور مصغرة للموقع. في حين أنه قد تكون هناك طرق أخرى للقيام بأشياء مماثلة ، فلا شيء يمكنه التغلب على التحكم لديك باستخدام الأدوات التي تبنيها بنفسك.
تعرف على كيفية كشط الصور من أي موقع ويب باستخدام Python ومكتبة BeautifulSoup.
هل يعتبر تجريف الصور أمرًا قانونيًا؟
يحب تجريف ويب أكثر عمومية، يعد تجريف الصور طريقة لتنزيل محتوى موقع الويب. هذا ليس مخالفًا للقانون ، ولكن هناك بعض القواعد وأفضل الممارسات التي يجب عليك اتباعها. أولاً ، يجب أن تتجنب إفساد موقع ويب إذا كان ينص صراحةً على أنه لا يريدك أن تفعل ذلك. يمكنك معرفة ذلك من خلال البحث عن ملف /robots.txt ملف على الموقع الهدف.
تسمح معظم مواقع الويب بالزحف على الويب لأنها تريد أن تقوم محركات البحث بفهرسة محتواها. يمكنك كشط مثل هذه المواقع لأن صورها متاحة للجمهور.
ومع ذلك ، لمجرد أنه يمكنك تنزيل صورة ، فهذا لا يعني أنه يمكنك استخدامها كما لو كانت صورتك. ترخص معظم مواقع الويب صورها لمنعك من إعادة نشرها أو إعادة استخدامها بطرق أخرى. افترض دائمًا أنه لا يمكنك إعادة استخدام الصور ما لم يكن هناك استثناء محدد.
إعداد حزمة Python
ستحتاج إلى تثبيت بعض الحزم قبل أن تبدأ. إذا لم يكن لديك Python مثبتًا على جهاز الكمبيوتر الخاص بك ، فتفضل بزيارة المسؤول python.org موقع لتحميل وتثبيت أحدث إصدار.
بعد ذلك ، افتح الجهاز الطرفي في مجلد المشروع الخاص بك و تنشيط بيئة افتراضية Python لعزل تبعياتك.
أخيرًا ، قم بتثبيت ملف الطلبات و شوربة جميلة الحزم التي تستخدم النقطة:
طلبات تثبيت نقطة bs4
تجريف الصورة ببايثون
في هذا البرنامج التعليمي لإخراج الصور ، ستستخدم ملف الطلبات مكتبة لجلب صفحة ويب تحتوي على الصور المستهدفة. ستقوم بعد ذلك بتمرير الرد من هذا الموقع إلى شوربة جميلة للحصول على جميع عناوين روابط الصور من IMG العلامات. ستكتب بعد ذلك كل ملف صورة في مجلد لتنزيل الصور.
كيفية إحضار عناوين URL للصور باستخدام Python BeautifulSoup
الآن انطلق وأنشئ ملف Python في مجلد جذر مشروعك. تأكد من إلحاق ملف .السنة التحضيرية امتداد لاسم الملف.
يستمر كل مقتطف رمز في هذا البرنامج التعليمي من السابق.
افتح ملف Python بامتداد أي محرر كود جيد واستخدم الكود التالي لطلب صفحة ويب:
يستورد الطلبات
URL = "imagesiteURL" # استبدل هذا بعنوان URL الخاص بالموقع
getURL = request.get (URL، headers = {"User-Agent": "Mozilla /5.0"})
طباعة (getURL.status_code)
إذا كان البرنامج أعلاه ينتج رمز استجابة 200 ، فإن الطلب كان ناجحًا. خلاف ذلك ، قد ترغب في التأكد من أن اتصال الشبكة الخاص بك مستقر. تأكد أيضًا من تقديم عنوان URL صالح.
الآن استخدم شوربة جميلة لقراءة محتوى صفحة الويب بمساعدة html_parser:
من بكالوريوس 4 يستورد شوربة جميلة
soup = BeautifulSoup (getURL.text، "html.parser")
images = soup.find_all ('img')
طباعة (صور)
ينشئ هذا الرمز قائمة من الكائنات ، يمثل كل منها صورة من صفحة الويب. ومع ذلك ، ما تحتاجه من هذه البيانات هو نص كل صورة src ينسب.
لاستخراج المصدر من كل IMG بطاقة شعار:
imageSources = []
إلى عن على صورة في الصور:
imageSources.append (image.get ('src'))
طباعة (مصادر الصورة)
أعد تشغيل الكود ، وستظهر عناوين الصور الآن في قائمة جديدة (مصادر الصورة). لقد نجحت في استخراج كل مصدر صورة من صفحة الويب المستهدفة.
كيفية حفظ الصور ببايثون
أولاً ، قم بإنشاء مجلد وجهة التنزيل في الدليل الجذر لمشروعك وقم بتسميته الصور.
لكي تتمكن Python من تنزيل الصور بنجاح ، يجب أن تكون مساراتها عبارة عن عناوين URL مطلقة كاملة. بمعنى آخر ، يجب تضمين " http://" أو " https://" البادئة ، بالإضافة إلى المجال الكامل للموقع. إذا كانت صفحة الويب تشير إلى صورها باستخدام عناوين URL ذات صلة ، فستحتاج إلى تحويلها إلى عناوين URL مطلقة.
في الحالة السهلة ، عندما يكون عنوان URL مطلقًا ، فإن بدء التنزيل هو مجرد حالة لطلب كل صورة من المصادر المستخرجة سابقًا:
إلى عن على صورة في مصادر الصورة:
webs = calls.get (صورة)
فتح ('images /' + image.split ('/') [-1] ، "wb"). اكتب (webs.content)
ال image.split ('/') [- 1] الكلمة الأساسية تقسم ارتباط الصورة عند كل شرطة مائلة للأمام (/). ثم يقوم باسترداد اسم ملف الصورة (بما في ذلك أي امتداد) من العنصر الأخير.
ضع في اعتبارك أنه في حالات نادرة ، قد تتعارض أسماء ملفات الصور ، مما يؤدي إلى الكتابة فوق التنزيل. لا تتردد في استكشاف حلول لهذه المشكلة كامتداد لهذا المثال.
يمكن أن تصبح عناوين URL المطلقة معقدة للغاية ، مع تغطية الكثير من حالات الحافة. لحسن الحظ ، هناك طريقة مفيدة في طلبات دوت كوم بات حزمة تسمى رابط. تعرض هذه الطريقة عنوان URL كاملًا ، نظرًا لعنوان URL الأساسي وعنوان URL الذي قد يكون نسبيًا. يتيح لك حل القيم التي ستجدها فيها href و src صفات.
الكود النهائي يبدو كالتالي:
من بكالوريوس 4 يستورد شوربة جميلة
URL = "imagesiteURL" # استبدل هذا بعنوان URL الخاص بالموقع
getURL = request.get (URL، headers = {"User-Agent": "Mozilla /5.0"})
soup = BeautifulSoup (getURL.text، "html.parser")images = soup.find_all ('img')
تم حل عنوان URL = []إلى عن على صورة في الصور:
src = image.get ('src')
solutionURLs.append (request.compat.urljoin (URL ، src))
إلى عن على صورة في عناوين URL التي تم حلها:
webs = calls.get (صورة)
فتح ('images /' + image.split ('/') [-1] ، "wb"). اكتب (webs.content)
لا تنقص بيانات الصورة أبدًا
تصطدم العديد من مشاريع التعرف على الصور بجدار من الطوب بسبب عدم كفاية كمية الصور لتدريب نموذج. ولكن يمكنك دائمًا كشط الصور من مواقع الويب لتعزيز مستودع البيانات الخاص بك. ولحسن الحظ ، فإن Python عبارة عن مكشطة صور قوية يمكنك استخدامها باستمرار دون الخوف من الحصول على سعر باهظ.
إذا كنت مهتمًا بجلب أنواع أخرى من البيانات من الويب ، فقد ترغب في معرفة كيفية استخدام Python لكشط الويب العام.