هل من الجيد تعلّم كيفية استخراج البيانات من الويب؟ إذا كنت تريد توفير مئات الساعات من العمل، فعليك بذلك. كما أنها مهارة رائعة للمبرمجين.
استخراج البيانات من الويب هو عملية جمع البيانات من المواقع الإلكترونية، وبما أن البيانات متاحة في كل مكان، يمكنك الحصول عليها ومعالجتها بفاعلية من خلال إتقان التقنيات الأساسية والمتقدمة.
أعددنا دليلًا للمبتدئين يتضمن كل الأساسيات، بدءًا من فهم بنية المواقع الإلكترونية، مرورًا بالتقنيات الأساسية، وصولًا إلى مفاهيم استخراج البيانات المتقدمة، لتصبح محترفًا.
فهم بنية المواقع الإلكترونية
قبل البدء في استخراج البيانات، عليك فهم كيفية بناء المواقع الإلكترونية.
أولًا، تُبنى المواقع الإلكترونية باستخدام الشيفرات البرمجية. وأكثرها شيوعًا HTML (لغة ترميز النص التشعبي)، وCSS (أوراق الأنماط المتتالية)، وJavaScript.
HTML هي الأكثر شيوعًا لأنها سهلة الاستخدام. وهي تحدد بنية صفحات الويب ومحتواها باستخدام العناصر التي تُمثَّل بالوسوم.
على سبيل المثال،
- <h1> للعناوين،
- <p> للفقرات،
على سبيل المثال لا الحصر (فهناك الكثير جدًا).
إليك مثالًا على شكل شيفرة HTML:
<html> <head> <title>Example Website</title> </head> <body> <h1>Welcome to my website!</h1> <p>This is a paragraph of text.</p> <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </body> </html> </body> </html>وأخيرًا، تحدد CSS تنسيق عناصر HTML، بينما تتولى JavaScript مسؤولية السلوك الديناميكي للمواقع الإلكترونية.
ستتنقل أداة استخراج البيانات التي سنستخدمها في الصفحة بالاستعانة ببنيتها، وستحدد المحتوى المراد استخراجه. وتميل المواقع ذات البنية الأكثر تنظيمًا ووضوحًا إلى أن تكون أسهل في استخراج البيانات منها. وبصفتك مبتدئًا، لا شك أنك تقدر ذلك، أليس كذلك؟
إعداد بيئة التطوير
حسنًا، بعد أن أصبحت لديك فكرة عن بنية المواقع الإلكترونية، يمكنك البدء في إعداد بيئة التطوير.
أولًا، عليك اختيار لغة برمجة، إذ لا تصلح جميع اللغات لهذه المهمة. وتُعد Python الخيار الأكثر شيوعًا لاستخراج البيانات، فهي لغة عالية المستوى وسهلة الاستخدام، كما أنها تضم مكتبات وأطر عمل وأدوات مدمجة رائعة.
تتيح هذه الأدوات حل مهام محددة مرتبطة باستخراج البيانات، مثل ما يلي:
- Requests: تسهّل إرسال طلبات HTTP إلى الموقع المستهدف.
- BeautifulSoup: تُستخدم هذه المكتبة لتحليل مستندات HTML وXML. لكن، لحظة، ما المقصود بالتحليل؟ إنه عملية فحص البيانات المنظّمة وتفسيرها.
- Selenium: لأتمتة متصفحات الويب لتنفيذ مهام تحاكي التفاعل البشري.
- Scrapy: يمكن استخدام إطار العمل الشامل هذا لمهام مختلفة، مثل الزحف إلى الويب (البحث عن عناوين URL لاستخراج البيانات)، والتنقيب عن البيانات، والاختبار الآلي.
كيف تبدأ؟
- إعداد البيئة: نزّل أحدث إصدار من Python وثبّته. الأمر بهذه السهولة.
- إعداد بيئة افتراضية: أنشئ بيئة افتراضية لعزل متطلبات مشروعك. افتح الطرفية وشغّل الأوامر التالية:
python -m venv myenv source myenv/bin/activate # For Unix/Linux myenv\Scripts\activate.bat # For Windows3. تثبيت المكتبات والأدوات: أنصحك بتثبيت Requests وSelenium وBeautifulSoup وScrapy للبدء. يمكنك تثبيتها باستخدام الأمر “pip install”، فما عليك سوى فتح الطرفية وتشغيل ما يلي:
pip install requests beautifulsoup4 scrapy seleniumأساسيات استخراج البيانات من الويب: الأخلاقيات وأفضل الممارسات
تمهّل. قبل التعمق في الجوانب التقنية، دعنا نلقي نظرة على الآثار الأخلاقية وأفضل الممارسات لاستخراج البيانات من الويب.
يعرف كل من يعمل في هذا المجال بعض هذه الأمور، لكن على المبتدئين فهم الإرشادات التالية حتى يلتزموا بالحدود:
- احترم ملف Robots.txt: القاعدة الأولى لاستخراج البيانات هي احترام ملف Robots.txt. وهو ملف نصي موجود في كل موقع، يوضح للجميع أساسًا ما يمكن استخراجه وما لا يمكن.
- احترم شروط الخدمة الخاصة بالموقع: راجع شروط خدمة الموقع لمعرفة ما إذا كان استخراج البيانات من الويب مسموحًا.
- حدّد معدل استخراج البيانات وتأثيره على الخوادم: تجنب إرسال عدد كبير جدًا من الطلبات خلال فترة قصيرة. كذلك، تجنب إثقال الخادم من خلال وضع فواصل زمنية بين الطلبات.
- استخدم واجهات برمجة التطبيقات (إن توفرت): قبل استخراج البيانات، تحقق مما إذا كان الموقع يوفر واجهة برمجة تطبيقات للوصول إلى البيانات. دعني أخبرك عن المرات التي عملت فيها على أداة لاستخراج البيانات، ثم اكتشفت أن واجهة برمجة التطبيقات كانت متاحة، لكنني لم أكلف نفسي عناء التحقق. استخدام واجهة برمجة التطبيقات أسهل بكثير (صدقني)، لأنها توفر بيانات منظّمة.
- الاعتبارات القانونية: تحقق من القوانين للتأكد من أنك لا تنتهك حقوق الملكية الفكرية أو تخالف أي قاعدة. إذا لم تكن متأكدًا، فمن الأفضل استشارة محامٍ أولًا.
البدء باستخراج البيانات من الويب: التقنيات الأساسية
حسنًا، انتهينا من النظرية والمفاهيم، فلنبدأ العمل. أول ما ستتعلمه هو كيفية إرسال طلبات HTTP.
إرسال طلبات HTTP (GET وPOST) باستخدام مكتبة Requests في Python
سنستخدم هنا مكتبة Requests في Python. إليك مثالًا:
import requests url = 'https://example.com' response = requests.get(url) html_content = response.textهنا تحدد عنوان URL للصفحة التي تريد استخراج البيانات منها. باستخدام requests.get () نرسل طلب GET، ويُخزَّن محتوى HTML للصفحة في المتغير html_content.
تحليل HTML باستخدام BeautifulSoup
بعد الحصول على محتوى HTML، يمكنك تحليله باستخدام مكتبة BeautifulSoup لاستخراج بيانات محددة. إليك مثالًا:
from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') title = soup.find('h1').text paragraphs = soup.find_all('p')في هذا الكود، ننشئ كائنًا من BeautifulSoup بتمرير محتوى HTML وتحديد المحلّل (في هذه الحالة، ‘html.parser‘). يمكننا بعد ذلك استخدام أساليب مثل find() وfind_all() للعثور على عناصر محددة استنادًا إلى وسومها أو سماتها.
استخراج البيانات باستخدام محددات CSS وأساليب مثل find() وfind_all()
توفر محددات CSS طريقة فعّالة للعثور على العناصر في صفحة ويب. تتيح لك BeautifulSoup استخدام محددات CSS لاستخراج البيانات.
إليك مثالًا:
links = soup.select('a.external-link') for link in links: href = link['href'] text = link.text print(f"Link: {href}, Text: {text}")في هذا الكود، نستخدم الأسلوب select() للعثور على جميع الوسوم التي تحمل الفئة “external-link“. ويمكننا بعد ذلك التكرار على العناصر المحددة واستخراج السمات أو النص المطلوب.
حفظ البيانات المستخرجة في ملفات
بعد استخراج البيانات المطلوبة، يمكنك حفظها في ملف لإجراء مزيد من التحليل أو المعالجة. إليك مثالًا على حفظ البيانات في ملف CSV:
import csv data = [ ['Name', 'Age', 'City'], ['John', '25', 'New York'], ['Alice', '30', 'London'], ] with open('output.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerows(data)في هذا الكود، نعرّف قائمة بصفوف البيانات، ونفتح ملفًا باسم “output.csv” في وضع الكتابة، وننشئ كائنًا لكتابة ملفات CSV، ثم نكتب صفوف البيانات في الملف.
هذه هي التقنيات الأساسية التي عليك التدرب عليها. ومع تقدمك، ستلاحظ وجود حالات يصعب فيها استخراج البيانات، مثل المواقع الديناميكية أو تقسيم المحتوى على صفحات.
لا تقلق، إذ يمكن استخراج البيانات من (تقريبًا) كل موقع إذا كنت تعرف التقنيات المناسبة وتملك الأدوات الملائمة.
التعامل مع تقسيم المحتوى على صفحات وتعدد الصفحات
يشير مصطلح “تقسيم المحتوى على صفحات” إلى المواقع التي توزّع محتواها على عدة صفحات. إذا أردت استخراج البيانات من جميع الصفحات، فعليك تحديد نمط تقسيم المحتوى على صفحات. بهذه الطريقة، يمكنك تعديل حلقة الاستخراج والحصول على النتائج.
اطّلع على التقنيات التالية:
- تحديد أنماط تقسيم المحتوى على صفحات في عناوين URL: ابحث عن أنماط في بنية عنوان URL تشير إلى رقم الصفحة. على سبيل المثال، تتبع عناوين URL مثل https://example.com/page/1 وhttps://example.com/page/2 وما إلى ذلك نمطًا واضحًا لتقسيم المحتوى على صفحات.
- تعديل حلقة الاستخراج: اضبط حلقة الاستخراج لتكرار نطاق أرقام الصفحات. على سبيل المثال:
for page in range(1, 11): url = f"https://example.com/page/{page}" # Scrape data from each pageفي هذا الكود، نكرّر أرقام الصفحات من 1 إلى 10 وننشئ عنوان URL لكل صفحة ديناميكيًا.
3. اكتشاف وجود زر “التالي”: تستخدم بعض المواقع زر “التالي” بدلًا من أرقام الصفحات الصريحة. في هذه الحالات، يمكنك التحقق من وجود زر “التالي” ومتابعة استخراج البيانات إلى أن يختفي.
التعامل مع المواقع الديناميكية وعرض JavaScript
بصفتك جامعًا للبيانات، ستواجه بالتأكيد مواقع تفاعلية ومعقدة للغاية، وذلك بهدف تحسين تجربة المستخدم. تعتمد هذه الأنواع من المواقع بشدة على JavaScript، ويُطلق عليها عمومًا مواقع ذات محتوى ديناميكي.
لكن، ما المشكلة في ذلك؟ تكمن المشكلة في أن الشيفرة المصدرية في هذه المواقع قد لا تحتوي على البيانات المطلوبة، ما يجعلها تحديًا لعمليات جمع البيانات.
وهنا يأتي دور أدوات مثل Selenium.
Selenium أداة قوية لأتمتة متصفحات الويب. تتيح لك التفاعل مع صفحات الويب، وملء النماذج، والنقر على الأزرار، واستخراج البيانات من المحتوى المعروض ديناميكيًا.
إعداد Selenium
إذا كنت قد ثبّت Selenium بالفعل، فالخطوة التالية هي تثبيت برنامج تشغيل ويب للمتصفح الذي تفضله. على سبيل المثال، ChromeDriver لمتصفح Google Chrome.
إليك مثالًا على كيفية استخدامه:
from selenium import webdriver driver = webdriver.Chrome() # Assumes ChromeDriver is installed and in PATH driver.get('https://example.com') # Perform actions and extract data title = driver.find_element_by_tag_name('h1').text driver.quit()في هذه الشيفرة، ننشئ مثيلًا من برنامج تشغيل الويب Chrome، وننتقل إلى عنوان URL محدد باستخدام driver.get()، ثم ننفذ الإجراءات ونستخرج البيانات باستخدام أساليب Selenium مثل find_element_by_tag_name().
انتظار تحميل العناصر
في المواقع الديناميكية، لا يُحمّل المحتوى غالبًا في الوقت نفسه. لذلك، قد لا تتوفر بعض العناصر فور تحميل الصفحة. يمكنك التعامل مع ذلك باستخدام أساليب الانتظار الصريح والضمني في Selenium.
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10)<br>element = wait.until(EC.presence_of_element_located((By.ID, 'my-element-id')))في هذه الشيفرة، ننشئ كائن WebDriverWait بمهلة قدرها 10 ثوانٍ. ثم نستخدم الطريقة until() لانتظار ظهور عنصر يحمل معرّفًا محددًا.
بدائل Selenium
على الرغم من اعتقاد كثير من المستخدمين أن Selenium هو الخيار الأفضل للمواقع الديناميكية، ينبغي لك استكشاف البدائل لمعرفة ما يناسبك أكثر.
قد يكون Scrapy-Splash خيارًا مناسبًا. فهو دمج لمتصفح عديم الواجهة مع إطار عمل Scrapy. ويتيح استخراج البيانات بكفاءة أكبر بفضل البنية التحتية للشبكة غير الحاجبة في Scrapy والميزات المتقدمة في Splash لعرض صفحات الويب الديناميكية بسرعة.
يُعد Requests-html بديلًا آخر، إذ يوسّع وظائف مكتبة requests بإضافة دعم عرض JavaScript والتفاعل مع صفحات الويب.
تقنيات متقدمة لجمع بيانات الويب
مع بدء إحراز التقدم، ستجد أنك تتعامل مع بعض حالات جمع البيانات، لكنك ستواجه أيضًا حالات معقدة تتطلب تقنيات أكثر تقدمًا.
التعامل مع المصادقة وملفات تعريف الارتباط
تتطلب بعض المواقع المصادقة أو تستخدم ملفات تعريف الارتباط لإدارة جلسات المستخدمين. يمكنك التعامل مع المصادقة بإرسال بيانات تسجيل الدخول مع طلباتك، وإدارة ملفات تعريف الارتباط باستخدام مكتبات مثل requests أو http.cookiejar.
تجنب اكتشاف النشاط والحظر
قد تستخدم المواقع تدابير لاكتشاف أنشطة جمع بيانات الويب وحظرها. لتجنب الاكتشاف، يمكنك استخدام تقنيات مثل تدوير وكلاء المستخدم، واستخدام الوكلاء، وإضافة فواصل زمنية عشوائية بين الطلبات.
تخزين البيانات في قواعد البيانات
بدلًا من حفظ البيانات المجمعة في ملفات، يمكنك تخزينها في قواعد البيانات لتخزينها واسترجاعها بكفاءة أكبر. تشمل الخيارات الشائعة قواعد بيانات SQL مثل MySQL وPostgreSQL، وقواعد بيانات NoSQL مثل MongoDB.
جمع البيانات من واجهات API والتعامل مع بيانات JSON
مرحبًا! لقد عثرت على واجهة API. لكنها بتنسيق JSON. ماذا يمكنك أن تفعل؟ يمكنك استخدام مكتبات مثل requests لإرسال طلبات إلى واجهة API وتحليل استجابات JSON باستخدام وحدة json في Python.
جمع البيانات بالتوازي وبشكل غير متزامن
لتسريع عملية جمع البيانات، يمكنك الاستفادة من المعالجة المتوازية وتقنيات البرمجة غير المتزامنة. يمكن لمكتبات مثل multiprocessing وthreading وasyncio في Python مساعدتك على تحقيق ذلك.
جمع كل العناصر معًا: مشاريع واقعية لاستخراج بيانات الويب
عندما بدأتُ التدرّب على استخراج البيانات، بصفتي مبتدئًا، شعرت بأنني أعرف تمامًا ما عليّ فعله، إلى أن اضطررت إلى فعله حقًا. لا فائدة من الاكتفاء بالقراءة؛ عليك اختبار مهاراتك من خلال التدريب.
وما الطريقة الأفضل من العمل على مشاريع واقعية؟
لنلقِ نظرة على بعض الأمثلة وخطوات تنفيذها:
المثال 1: استخراج المقالات الإخبارية وتحليل المشاعر
- التخطيط لعملية استخراج البيانات:
- حدّد الموقع الإخباري الذي تريد استخراج البيانات منه
- حدّد بنية المقالات (العنوان، المحتوى، التاريخ، وغيرها)
- خطّط لصيغة تخزين البيانات (مثل CSV أو قاعدة بيانات)
- تنفيذ أداة استخراج البيانات:
- استخدم requests لجلب محتوى HTML للموقع الإخباري
- حلّل HTML باستخدام BeautifulSoup لاستخراج معلومات المقالات
- تعامل مع تقسيم الصفحات وانتقل بين صفحات متعددة
- خزّن البيانات المستخرجة بالتنسيق المختار
- تحليل البيانات المستخرجة وتمثيلها بصريًا:
- أجرِ تحليلًا للمشاعر في محتوى المقالات باستخدام مكتبات مثل NLTK أو TextBlob
- مثّل درجات المشاعر بصريًا باستخدام مكتبات مثل Matplotlib أو Plotly
- حدّد الاتجاهات والأنماط في مشاعر الأخبار بمرور الوقت
المثال 2: إنشاء أداة لمراقبة الأسعار
- استخراج معلومات المنتجات من مواقع التجارة الإلكترونية:
- حدّد مواقع التجارة الإلكترونية التي تريد استخراج البيانات منها
- حدّد بنية معلومات المنتجات (الاسم، السعر، التوفر، وغيرها)
- استخدم تقنيات استخراج بيانات الويب لجمع بيانات المنتجات من مواقع متعددة
- إعداد التنبيهات والإشعارات:
- حدّد حدود الأسعار أو معايير التوفر لكل منتج
- نفّذ آلية لمقارنة الأسعار المستخرجة بالحدود المحددة
- أعدّ إشعارات عبر البريد الإلكتروني أو الرسائل النصية لتنبيه المستخدمين عند انخفاض الأسعار أو توفر المنتجات
- نشر أداة استخراج البيانات على السحابة:
- اختر منصة سحابية (مثل AWS أو Google Cloud أو Heroku)
- هيّئ البيئة والتبعيات اللازمة
- جدول تشغيل أداة استخراج البيانات على فترات منتظمة
- خزّن البيانات المستخرجة في قاعدة بيانات سحابية لتسهيل الوصول إليها ومراقبتها
أطر عمل وأدوات استخراج بيانات الويب
أعلم أن مصطلحي «إطار العمل» و«المكتبة» يُستخدمان بالتبادل، لكنهما يعنيان أشياء مختلفة ويُستخدمان لأغراض مختلفة.
باستخدام مكتبات مثل Request أو BeautifulSoup، يمكنك إنشاء أدوات استخراج بيانات الويب من الصفر. أما أطر العمل، فتتيح لك تبسيط العملية لأنها مجموعة من الأدوات والمكتبات.
يمكنك النظر إلى الأمر بهذه الطريقة: المكتبات أشبه بالسيارات ذات ناقل الحركة اليدوي؛ تمنحك تحكمًا كاملًا، لكنها تتطلب مزيدًا من الجهد والمهارة في القيادة. أما أطر العمل فأشبه بالسيارات الأوتوماتيكية؛ إذ توفر تجربة أكثر سلاسة وكفاءة من خلال تبسيط العديد من الجوانب المملة لاستخراج البيانات.
من أبرز الخيارات الشائعة:
Scrapy
Scrapy إطار عمل لـ Python يوفّر منظومة متكاملة لإنشاء أدوات استخراج بيانات ويب قابلة للتوسع وفعّالة. ومن أبرز ميزاته:
- مصمم ليكون سريعًا.
- لا حاجة إلى إضافة تعليمات برمجية لإنشاء ملفات CSV وJSON وغيرها.
- يدعم XPath ومحددات CSS.
- منظومة إضافات رائعة، مثل دعم الوسائط البرمجية الوسيطة.
- التكامل مع خطوط معالجة العناصر لمعالجة البيانات وتخزينها
PySpider
PySpider إطار عمل آخر لـ Python، لكنه متوافق مع JavaScript، بخلاف Scrapy، وهذه أبرز ميزاته. كما أنه مناسب جدًا للمبتدئين. ومن ميزاته الأساسية:
- يدعم عرض JavaScript باستخدام PhantomJS أو Puppeteer
- قائمة انتظار مهام ومجدول مدمجان
- التكامل مع قواعد البيانات وقوائم انتظار الرسائل
- يدعم التنفيذ المتزامن
أدوات وخدمات استخراج بيانات الويب
بالإضافة إلى أطر العمل، ثمة أدوات وخدمات تساعدك على تسهيل استخراج البيانات. وأفضل ما فيها أنها لا تتطلب سوى قدر ضئيل من البرمجة. ومن الخيارات المتاحة:
- Octoparse: أداة سحابية لاستخراج بيانات الويب، بواجهة تعتمد على التأشير والنقر لاستخراج البيانات من المواقع الإلكترونية.
- ParseHub: تطبيق لسطح المكتب يتيح لك إنشاء أدوات استخراج بيانات الويب من خلال تحديد العناصر على صفحة الويب بصريًا.
- Import.io: منصة قائمة على الويب توفر أدوات لاستخراج البيانات من المواقع الإلكترونية وواجهات برمجة التطبيقات.
خلاصة أساسيات استخراج بيانات الويب
استعرضنا في هذا الدليل أساسيات استخراج بيانات الويب على نطاق واسع، مثل فهم بنية المواقع الإلكترونية، والاعتبارات الأخلاقية، والتقنيات الأساسية والمتقدمة، إلى جانب الأدوات وأطر العمل الإضافية.
أنت الآن مستعد للبدء، لكن فكّر في توسيع معرفتك من خلال قراءة مصادر إضافية، مثل الوثائق الرسمية للمكتبات وأطر العمل، ودروس استخراج بيانات الويب.
وحاول أيضًا الاستفادة من إرشادات أصحاب الخبرة في استخراج البيانات ضمن مجتمعات هذا المجال ومنتدياته. لا تنعزل، فنحن بحاجة إلى بعضنا.
كنا جميعًا مبتدئين في وقت ما، لذا كن صبورًا مع نفسك، وابدأ بخطوات صغيرة وتدرّب بانتظام. ومع ما يكفي من التدريب والتفاني، سترى كيف ستتمكن من التعامل مع مشاريع أكثر تعقيدًا كلما تقدمت.
