شعار proxyscrape داكن

برنامج تعليمي خطوة بخطوة: كيفية كشط الصور باستخدام بايثون

أدلة إرشادية, إرشادات إرشادات, كشط, سبتمبر-05-20245 دقائق للقراءة

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

أساسيات كشط الصور باستخدام بايثون

للبدء في كشط الصور باستخدام Python، ستحتاج إلى التعرف على بعض المكتبات الرئيسية التي تجعل هذه المهمة أسهل. الخيارات الأكثر شيوعًا هي BeautifulSoup و Scrapy و Requests.

حساء جميل لاستخراج عناوين URL للصور

BeautifulSoup هي مكتبة Python تُستخدم لتحليل مستندات HTML و XML. تقوم بإنشاء شجرة تحليل من أكواد مصدر الصفحة التي يمكن استخدامها لاستخراج البيانات بسهولة.

إليك مثال بسيط عن كيفية استخراج عناوين URL للصور باستخدام BeautifulSoup:

الخطوة 1: قم بتثبيت الحساء الجميل والطلبات:

 طلبات تثبيت bs4 bs4 

الخطوة 2: استخراج عناوين URL للصور:

 استيراد الطلبات
 من bs4 bs4 استيراد الحساء الجميل

 عنوان url = 'https://books.toscrape.com/'

 الاستجابة = الطلبات.get(url)

 حساء = حساء جميل(استجابة.text، 'html.parser')
 الصور = soup.find_all('img')

This code fetches the HTML content of the specified URL, parses it with BeautifulSoup, and then finds all the `<img>` tags, printing out their `src` attributes.

تنزيل الصور باستخدام بايثون

بمجرد استخراج عناوين URL للصور، فإن الخطوة التالية هي تنزيلها. مكتبة الطلبات مثالية لهذه المهمة نظرًا لبساطتها وسهولة استخدامها.

استخدام الطلبات لتنزيل الصور

إليك كيفية تنزيل الصور باستخدام الطلبات:

تنزيل الصورة من URL:

for ind, img in enumerate(images):
   img_data = requests.get(url+img['src']).content
   with open(f'image_{ind+1}.jpg', 'wb') as handler:
       handler.write(img_data)

يرسل هذا البرنامج النصي طلب GET إلى عنوان URL للصورة ويكتب المحتوى الثنائي للصورة إلى ملف.

معالجة الأخطاء والاستثناءات

من المهم التعامل مع الأخطاء والاستثناءات لضمان تشغيل البرنامج النصي الخاص بك بسلاسة حتى عند ظهور مشاكل. إليك نسخة محسّنة من النص البرمجي السابق:

معالجة الأخطاء:

for ind, img in enumerate(images):
   try:
       img_data = requests.get(url+img['src']).content
       with open(f'image_{ind+1}.jpg', 'wb') as handler:
           handler.write(img_data)
   except Exception as e:
       print(f"An error occurred during the extraction of image \n Image Url: {img['src']} \n Error: {e}")

يتضمن مقتطف الشيفرة هذا كتلة محاولة استثناء لالتقاط أي أخطاء قد تحدث أثناء عملية التنزيل.

تقنيات متقدمة لكشط الصور

بالنسبة لمهام الكشط الأكثر تعقيدًا، مثل كشط صفحات متعددة أو مواقع ويب كاملة، فإن Scrapy هي مكتبة قوية يمكنها التعامل مع هذه السيناريوهات بكفاءة.

استخدام سكرابي للمهام المعقدة

Scrapy هو إطار عمل مفتوح المصدر وتعاوني للزحف على الويب لبايثون. وهو مصمم للسرعة والكفاءة، مما يجعله مثاليًا لمشاريع التجريف واسعة النطاق.

الخطوة 1: قم بتثبيت Scrapy:

 تثبيت السكرابي

الخطوة 2: إنشاء مشروع سكرابي:

 scrapy startproject image_scraper
 cd image_scraper

الخطوة 3: تحديد العنكبوت:

أنشئ ملف عنكبوت ('spider/image_spider.py') بالمحتوى التالي:

import scrapy
class ImageSpider(scrapy.Spider):
   name = 'imagespider'
   start_urls = ['https://books.toscrape.com/']
   def parse(self, response):
       # Extract image URLs and convert them to absolute if necessary
       for img in response.css('img::attr(src)').getall():
           abs_img_url = response.urljoin(img)
           yield {'image_url': abs_img_url}
      
       # Find the link to the next page and create a request for it
       next_page = response.css('a.next::attr(href)').get()
       if next_page is not None:
           next_page_url = response.urljoin(next_page)
           yield response.follow(next_page_url, self.parse)

يبدأ عنكبوت Scrapy البسيط هذا من عنوان URL المحدد، ويستخرج جميع عناوين URL للصور، ويتبع روابط الصفحة التالية لمواصلة الكشط.

تحسين مشاريع كشط الصور الخاصة بك

لتحسين مشاريع الكشط بشكل أكبر، فكّر في استخدام واجهات برمجة التطبيقات للوصول إلى صور عالية الجودة وأتمتة مهامك لتحقيق الكفاءة.

استخدام واجهات برمجة التطبيقات لكشط الصور

توفر واجهات برمجة التطبيقات طريقة موثوقة وقانونية للوصول إلى الصور. تقدم العديد من مواقع الويب واجهات برمجة التطبيقات التي تتيح لك البحث عن الصور وتنزيلها برمجياً. أحد هذه المواقع هو Unsplash API.

مثال مع واجهة برمجة تطبيقات Unsplash:

import requests
# Replace 'YOUR_ACCESS_KEY' with your actual Unsplash Access Key
api_url = "https://api.unsplash.com/photos/random"
headers = {"Authorization": "Client-ID YOUR_ACCESS_KEY"}
params = {"query": "nature"}
try:
   response = requests.get(api_url, headers=headers, params=params)
   response.raise_for_status()  # This will raise an exception for HTTP errors
   data = response.json()
   image_url = data['urls']['full']
   print(image_url)
except requests.exceptions.HTTPError as err:
   print(f"HTTP error occurred: {err}")
except Exception as err:
   print(f"An error occurred: {err}")

يستخدم هذا النص البرمجي واجهة برمجة تطبيقات Unsplash لجلب صورة طبيعية عشوائية.

أتمتة مهام كشط الصور

توفر الأتمتة الوقت وتضمن تشغيل مهام الكشط بسلاسة دون تدخل يدوي. يمكن لأدوات مثل مهام cron jobs على أنظمة Unix أو برنامج جدولة المهام على نظام ويندوز جدولة البرامج النصية الخاصة بك لتشغيلها على فترات منتظمة.

وظائف Cron على أنظمة يونكس - Crontab:

Crontab هي أداة فعّالة في أنظمة التشغيل الشبيهة بأنظمة يونكس لجدولة المهام، والمعروفة باسم"مهام كرونتاب" لتعمل تلقائيًا في أوقات محددة. لنرى كيف يمكننا جدولة مهمة باستخدام Crontab.

فهم بناء الجملة Crontab:

يتكون ملف crontab من سطور الأوامر، حيث يمثل كل سطر مهمة منفصلة. وتكون الصيغة كالتالي:

دقيقة ساعة دوم ساعة دوم مون داو سمد
  • دقيقة: حقل الدقيقة (من 0 إلى 59)
  • الساعة: حقل الساعة (من 0 إلى 23)
  • يوم من الشهر يوم من الشهر (من 1 إلى 31)
  • MON: حقل الشهر (من 1 إلى 12)
  • DOW: يوم الأسبوع (من 0 إلى 7 حيث يمثل الصفر و7 يوم الأحد)
  • CMD: الأمر المطلوب تشغيله (في هذه الحالة سيكون الأمر المراد تشغيله (في هذه الحالة سيكون قابلاً للتنفيذ من البرنامج النصي للبايثون)

فيما يلي مثال لتشغيل برنامج نصي بايثون يوميًا في الساعة 8:00 مساءً

0 20 * * * * * /usr/bin/python3/path/to/Image_Scraper.py

استخدام برنامج جدولة المهام (ويندوز):

  • افتح برنامج جدولة المهام (استخدم شريط البحث على النوافذ وابحث عن "برنامج جدولة المهام")
  • انقر على"إنشاء مهمة أساسية"
  • أدخل اسمًا ووصفًا وانقر على"التالي"
  • حدد التفصيل أو الفترة الزمنية التي تحتاجها لتشغيل هذه المهمة وانقر فوق"التالي"
  • تأكد الآن من تحديد"بدء تشغيل برنامج" وانقر على"التالي"
  • أدخل المسار إلى البرنامج النصي للبايثون الخاص بك بالنقر على"استعراض". اختياريًا إذا كان عليك تقديم أي وسيطات لبرنامج بايثون النصي الخاص بك، يمكنك القيام بذلك عن طريق إضافتها في حقول"إضافة وسيطات" والنقر على"التالي"
  • كخطوة أخيرة، ما عليك سوى النقر فوق"إنهاء" وهكذا، تصبح هذه المهمة جاهزة للتشغيل في الفترة الزمنية المحددة.

الخاتمة

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

يعد كشط الصور مهارة قوية يمكن أن تعزز قدراتك في الحصول على البيانات وتفتح إمكانيات جديدة لمشاريعك.

كشط سعيد!