في منشور المدونة هذا، سنرشدك خلال عملية كشط الصور من مواقع الويب باستخدام Python. ستتعلم كيفية البدء في استخدام المكتبات الشائعة، والتعامل مع المخاطر المحتملة، وحتى استكشاف التقنيات المتقدمة للارتقاء بمهاراتك في كشط الويب إلى المستوى التالي.
للبدء في كشط الصور باستخدام Python، ستحتاج إلى التعرف على بعض المكتبات الرئيسية التي تجعل هذه المهمة أسهل. الخيارات الأكثر شيوعًا هي BeautifulSoup و Scrapy و Requests.
BeautifulSoup هي مكتبة Python تُستخدم لتحليل مستندات HTML و XML. تقوم بإنشاء شجرة تحليل من أكواد مصدر الصفحة التي يمكن استخدامها لاستخراج البيانات بسهولة.
إليك مثال بسيط عن كيفية استخراج عناوين URL للصور باستخدام BeautifulSoup:
طلبات تثبيت bs4 bs4
استيراد الطلبات
من 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 للصور، فإن الخطوة التالية هي تنزيلها. مكتبة الطلبات مثالية لهذه المهمة نظرًا لبساطتها وسهولة استخدامها.
إليك كيفية تنزيل الصور باستخدام الطلبات:
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 هو إطار عمل مفتوح المصدر وتعاوني للزحف على الويب لبايثون. وهو مصمم للسرعة والكفاءة، مما يجعله مثاليًا لمشاريع التجريف واسعة النطاق.
تثبيت السكرابي
scrapy startproject image_scraper
cd image_scraper
أنشئ ملف عنكبوت ('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.
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 أو برنامج جدولة المهام على نظام ويندوز جدولة البرامج النصية الخاصة بك لتشغيلها على فترات منتظمة.
Crontab هي أداة فعّالة في أنظمة التشغيل الشبيهة بأنظمة يونكس لجدولة المهام، والمعروفة باسم"مهام كرونتاب" لتعمل تلقائيًا في أوقات محددة. لنرى كيف يمكننا جدولة مهمة باستخدام Crontab.
يتكون ملف crontab من سطور الأوامر، حيث يمثل كل سطر مهمة منفصلة. وتكون الصيغة كالتالي:
دقيقة ساعة دوم ساعة دوم مون داو سمد
فيما يلي مثال لتشغيل برنامج نصي بايثون يوميًا في الساعة 8:00 مساءً
0 20 * * * * * /usr/bin/python3/path/to/Image_Scraper.py
في هذه المدونة، استكشفنا كيفية كشط الصور من مواقع الويب باستخدام Python. لقد غطينا الأساسيات باستخدام BeautifulSoup و Requests، والتقنيات المتقدمة باستخدام Scrapy، وممارسات الكشط الأخلاقية. بالإضافة إلى ذلك، ناقشنا كيفية تحسين مشاريع الكشط باستخدام واجهات برمجة التطبيقات وأدوات الأتمتة مثل برنامج جدولة مهام ويندوز.
يعد كشط الصور مهارة قوية يمكن أن تعزز قدراتك في الحصول على البيانات وتفتح إمكانيات جديدة لمشاريعك.
كشط سعيد!