انتقل إلى المحتوى

تجريف الويب باستخدام السيلينيوم وبيثون: الدليل النهائي لعام 2024

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

نظرة عامة على تجريف الويب

قبل الغوص في السيلينيوم، دعونا أولاً نفهم ما هو تجريف الويب ولماذا يتم استخدامه.

يشير تجريف الويب إلى تقنيات جمع البيانات من مواقع الويب تلقائيًا من خلال البرامج النصية والروبوتات بدلاً من النسخ واللصق اليدوي. يتم بعد ذلك تنظيم البيانات المسروقة وتخزينها في قاعدة بيانات أو جدول بيانات لمزيد من التحليل.

تتضمن حالات الاستخدام الأكثر شيوعًا لتجريد الويب ما يلي:

  • مراقبة الأسعار - تتبع أسعار المنتجات عبر مواقع التجارة الإلكترونية. المساعدة في اكتشاف التغييرات وأخطاء الأسعار.

  • أبحاث السوق - جمع البيانات عن المنافسين والمنتجات والمراجعات وما إلى ذلك عبر الويب.

  • مراقبة الأخبار – كشط المقالات والأخبار من المواقع الإعلامية. مفيد للصحفيين ومحترفي العلاقات العامة.

  • أبحاث - يستخدم علماء الاجتماع تجريف الويب لجمع بيانات الوسائط الاجتماعية للدراسات البحثية.

  • بناء قاعدة البيانات – إنشاء مجموعات بيانات منظمة لجهات اتصال الشركة ومواصفات المنتج وما إلى ذلك عن طريق استخراج مواقع الويب.

يمكن أن يوفر تجريف الويب قدرًا هائلاً من الوقت والجهد مقارنة بجمع البيانات يدويًا. ومع ذلك، تأكد من اتباع قواعد أخلاقية واتباع قواعد ملف robots.txt الخاص بموقع الويب.

لماذا نستخدم السيلينيوم في تجريف الويب؟

هناك العديد من الأدوات المتاحة لتجميع الويب مثل BeautifulSoup وScrapy وPuppeteer وما إلى ذلك. ومع ذلك، فإن السيلينيوم يتميز عندما تحتاج إلى:

  • استخراج البيانات من مواقع الويب المعقدة والديناميكية التي تقوم بتحميل المحتوى باستخدام JavaScript.

  • تفاعل مع مواقع الويب عن طريق النقر على الأزرار وملء النماذج وما إلى ذلك قبل استخراجها.

  • امسح البيانات المخفية خلف نماذج تسجيل الدخول أو بوابات الدفع.

  • قم بتوسيع عملية التجريد للتعامل مع مواقع الويب الكبيرة التي تحتوي على آلاف الصفحات.

يقوم السيلينيوم بأتمتة متصفح الويب الفعلي مثل Chrome أو Firefox بدلاً من مجرد جلب وتحليل HTML مثل معظم برامج كاشطات الويب الأخرى. وهذا يجعل من الممكن لكشط البيانات الديناميكية.

بالإضافة إلى ذلك، يمتلك السيلينيوم مجتمعًا كبيرًا يدعمه ويدعم لغات متعددة بما في ذلك Python وJava وC# وJavaScript.

بنية تجريف الويب بالسيلينيوم

قبل أن ننتقل إلى الكود، دعونا نفهم كيف يقوم السيلينيوم باستخراج الويب:

هندسة السيلينيوم لتجريف الويب

  • يتفاعل السيلينيوم مع المتصفح باستخدام ملف واجهة برمجة تطبيقات WebDriver.

  • يقوم WebDriver بتشغيل متصفح مثل Chrome والتحكم فيه.

  • يقوم بتنفيذ تعليمات برمجية ونصوص مكتوبة بلغة Python وJava وما إلى ذلك.

  • يتم عرض صفحات الويب ومعالجتها بواسطة المتصفح.

  • يتم جمع البيانات المسروقة وتنظيمها وفقًا لمنطق البرنامج النصي.

  • يمكنك نشر المكشطة على أجهزتك الخاصة أو استخدام النظام الأساسي السحابي.

تسمح هذه البنية للسيلينيوم باستخراج حتى المواقع المعقدة التي تحتوي على جافا سكريبت والتي لا تستطيع أدوات مثل الطلبات التعامل معها.

إعداد السيلينيوم مع بايثون

قبل أن نتمكن من البدء في تجريف الويب، نحتاج إلى إعداد السيلينيوم في بيئة بايثون.

تثبيت بايثون

تأكد من تثبيت Python 3.6 أو أعلى على نظامك. يمكنك تنزيل أحدث إصدار من Python من python.org.

تثبيت السيلينيوم

بمجرد تثبيت Python، قم بتشغيل الأمر التالي لتثبيت السيلينيوم:

pip install selenium

سيؤدي هذا إلى تثبيت حزمة Python Selenium من PyPI.

تثبيت برامج تشغيل الويب

يسمح برنامج Selenium WebDriver بالتحكم في المتصفحات للتجريد. تحتاج إلى تثبيت WebDriver للمتصفح الذي ترغب في استخدامه:

الكروم: تحميل ChromeDriver الذي يتوافق مع إصدار Chrome الخاص بك.

برنامج فايرفوكس: احصل على ال GeckoDriver بناءً على إصدار Firefox الخاص بك.

حافة: تحميل هذا MicrosoftWebDriver.

تأكد من وجود WebDriver القابل للتنفيذ في PATH لنظامك للسماح للسيلينيوم باكتشافه.

هذا كل شيء! نحن الآن جاهزون لبدء تجريف الويب باستخدام Selenium Python.

إطلاق المتصفح

الخطوة الأولى هي تشغيل المتصفح من خلال السيلينيوم.

استيراد السيلينيوم وإنشاء WebDriver مثيل عن طريق تمرير المسار إلى برنامج تشغيل المتصفح القابل للتنفيذ:

from selenium import webdriver

driver = webdriver.Chrome(‘/path/to/chromedriver‘) 

يمكنك أيضًا تهيئة مثيل متصفح بدون رأس والذي لن يفتح نافذة مرئية:

from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

بعد ذلك ، استخدم get() طريقة لجعل مثيل المتصفح ينتقل إلى عنوان URL:

driver.get(‘https://www.example.com‘)

سيفتح المتصفح الآن الصفحة، ويعرض جافا سكريبت، ويحمل المحتوى الديناميكي وما إلى ذلك. الآن يمكننا أن نبدأ في استخراج البيانات!

تحديد موقع عناصر الصفحة

لاستخراج البيانات من الصفحات، نحتاج أولاً إلى العثور على عناصر HTML ذات الصلة. يوفر السيلينيوم find_element() طريقة لهذا:

search_box = driver.find_element(By.NAME, ‘q‘)

يؤدي هذا إلى تحديد موقع العنصر ذو السمة name = "q". بعض استراتيجيات تحديد المواقع الشائعة الأخرى هي:

  • By.ID - البحث عن طريق معرف العنصر
  • By.XPATH - البحث باستخدام استعلام XPath
  • By.CSS_SELECTOR - البحث باستخدام محدد CSS
  • By.CLASS_NAME - البحث حسب اسم فئة CSS
  • By.TAG_NAME - البحث عن طريق اسم علامة HTML

يمكنك أيضًا تحديد موقع عناصر متعددة باستخدام find_elements() الذي يقوم بإرجاع قائمة.

استخراج النص

بعد تحديد موقع العنصر، يمكنك استخراج النص الخاص به باستخدام الملف text صفة، عزا:

heading = driver.find_element(By.TAG_NAME, ‘h1‘)
print(heading.text)

سيؤدي هذا إلى طباعة <h1> عنوان النص على الصفحة.

وبالمثل، يمكنك الحصول على قيمة حقول الإدخال:

username = driver.find_element(By.ID, ‘username‘)
print(username.get_attribute(‘value‘))

للنقر على الروابط والأزرار الموجودة على الصفحة، استخدم click() الطريقة على العنصر:

link = driver.find_element(By.LINK_TEXT, ‘Next Page‘)
link.click() 

يتيح ذلك التفاعل مع المحتوى المرقّم، والنوافذ المنبثقة، والنماذج، وما إلى ذلك.

تعبئة النماذج

يمكنك إدخال النص في مربعات النص وعناصر الإدخال الأخرى باستخدام send_keys():

search_box.send_keys(‘Web Scraping‘)

يتيح ذلك تسجيل الدخول إلى المواقع وإرسال النماذج وما إلى ذلك قبل إجراء عملية الاستخراج.

تنفيذ جافا سكريبت

يسمح السيلينيوم أيضًا بتنفيذ JavaScript مباشرة على الصفحات التي تستخدم execute_script():

driver.execute_script(‘alert("Hello World");‘)

يمكنك استخدام هذا لاستخراج البيانات التي يتم إدخالها بواسطة JavaScript في DOM.

في انتظار تحميل العناصر

تستخدم المواقع الحديثة AJAX وJavaScript الثقيل لتحميل المحتوى ديناميكيًا. في بعض الأحيان، قد تحتاج إلى الانتظار حتى يتم تحميل عناصر أو بيانات معينة قبل استخراجها.

يحتوي السيلينيوم WebDriverWait و expected_conditions للتعامل مع هذا:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, ‘someid‘)))

سينتظر البرنامج النصي الآن ما يصل إلى 10 ثوانٍ حتى يصبح العنصر قابلاً للنقر.

هناك العديد من الشروط المتوقعة المتاحة مثل رؤية العنصر وتحميل AJAX وما إلى ذلك والتي يمكنك استخدامها للتعامل مع محتوى الصفحة الديناميكي.

التمرير عبر الصفحات

بالنسبة لصفحات الويب الطويلة، قد تحتاج إلى التمرير لأسفل لتحميل محتوى إضافي من خلال JavaScript. يمكن للسيلينيوم القيام بذلك أيضًا:

# Scroll down the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# Scroll back to top
driver.execute_script("window.scrollTo(0, 0);")   

وهذا يسمح لكشط صفحات الويب الطويلة. يعمل أسلوب التمرير نفسه على حذف المنشورات على Facebook وTwitter ومواقع التواصل الاجتماعي الأخرى.

التعامل مع تسجيل الدخول والدفع

تتطلب بعض المواقع تسجيل الدخول أولاً قبل الحذف أو قد يكون لديها نظام حظر الاشتراك غير المدفوع الذي يقيد الوصول.

يمكنك استخدام السيلينيوم لإدخال بيانات الاعتماد وتجاوز نظام حظر الاشتراك غير المدفوع والوصول إلى المعلومات المقيدة لاستخراجها:

username = driver.find_element(By.ID, ‘username‘)
password = driver.find_element(By.ID, ‘password‘)

username.send_keys(‘myusername1234‘) 
password.send_keys(‘mypassword5678‘)

login_button = driver.find_element(By.XPATH, ‘//button[text()="Log in"]‘)
login_button.click()

يسمح هذا بتسجيل الدخول إلى مواقع مثل Amazon وeBay وما إلى ذلك لاستخراج المحتوى المسور.

مثال على تجريف شبكة السيلينيوم

دعونا نجمع كل شيء معًا في برنامج نصي لكشط الويب السيلينيوم:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# Click cookie consent banner
cookie_btn = driver.find_element(By.ID, ‘cookiebanner-accept‘) 
cookie_btn.click()

# Wait for results to load
results = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "results"))
)

# Extract data from results 
headings = results.find_elements(By.TAG_NAME, ‘h3‘)
for heading in headings:
   print(heading.text)

driver.quit()

هذا البرنامج النصي:

  • يقوم بتشغيل Chrome وينتقل إلى example.com
  • ينقر على شعار الموافقة على ملفات تعريف الارتباط لتمكين عملية الاستخراج
  • ينتظر تحميل النتائج
  • يستخرج نصوص العناوين ويطبعها

يمكنك تحسين ذلك من خلال التمرير وإمكانيات تسجيل الدخول وما إلى ذلك لإنشاء أدوات كاشطات قوية!

نصائح لتقطيع الويب بشكل فعال باستخدام السيلينيوم

فيما يلي بعض النصائح لتحسين إنتاجية تجريف الويب لديك باستخدام السيلينيوم:

  • استخدم متصفح بلا رأس لإجراء عملية تجريف أسرع دون الحاجة إلى عرض واجهة المستخدم وعرضها

  • الحد من الإجراءات غير الضرورية مثل فتح علامات تبويب جديدة وتفاعلات التمرير وما إلى ذلك للتخلص بشكل أسرع

  • انتظر تحميل الصفحة وAJAX طلبات لإكمال قبل استخراج البيانات

  • قم بالتمرير بشكل تدريجي عند تجريف صفحات طويلة لتجنب تحميل كل شيء مرة واحدة

  • استخدم محددات CSS لسهولة القراءة والأداء عند تحديد موقع العناصر

  • أعد المحاولة على الأخطاء بدلاً من التوقف تمامًا لجعل الكاشطات أكثر قوة

  • طلبات الخنق لتجنب إرهاق الخوادم وحظرها

  • تشغيل في السحابة باستخدام خدمات مثل Selenium Grid من أجل الموثوقية والنطاق

بدائل السيلينيوم لكشط الويب

فيما يلي بعض الأدوات الشائعة الأخرى لتجميع الويب والتي يمكنك الاطلاع عليها:

  • حساء جميل - مكتبة بايثون الرائدة في استخراج HTML وXML

  • Scrapy – إطار عمل سريع للزحف على الويب لمشاريع التجريف الكبيرة

  • العرائس - مكتبة تجريف Chrome مقطوعة الرأس لمطوري JavaScript

  • الكاتب المسرحي – كشط باستخدام متصفحات Chromium وFirefox وWebKit

  • أبي - نظام أساسي لتجميع الويب قابل للتطوير مع وكلاء مدمجين ومتصفح Chrome بدون رأس

كل أداة لها نقاط القوة والضعف الخاصة بها. قم بتقييمها وفقًا لحالة الاستخدام المحددة الخاصة بك عند تحديد حل تجريف الويب.

وفي الختام

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

تأكد من اتباع ممارسات الكشط الأخلاقية واحترام قيود مواقع الويب عند استخدام السيلينيوم. لا تفرط في تحميل الخوادم بالتجريد العدواني.

بفضل قوة السيلينيوم، وPython، واستراتيجيات استخراج الصوت، يمكنك استخراج كميات هائلة من البيانات المفيدة من الويب لتطبيقات ذكاء الأعمال والأبحاث وعلوم البيانات.

الانضمام إلى محادثة

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *