هل من الجيد أن تتعلم كيفية استخراج البيانات من الويب؟ إذا كنت تريد توفير مئات الساعات من العمل، فعليك أن تتعلم ذلك. كما أنها مهارة رائعة يجب أن تمتلكها كمبرمج.
كشط الويب هو عملية استخراج البيانات من مواقع الويب، وبما أن البيانات متاحة في كل مكان، فيمكنك الحصول عليها ومعالجتها بشكل فعال من خلال إتقان التقنيات الأساسية والمتقدمة.
لقد قمنا بإعداد دليل للمبتدئين يتضمن جميع الأساسيات، من فهم بنية موقع الويب، والمرور بالتقنيات الأساسية وحتى مفاهيم كشط الويب المتقدمة، حتى تتمكن من أن تصبح محترفًا.
فهم بنية موقع الويب
قبل الغوص في عملية الكشط، عليك أن تفهم كيفية هيكلة مواقع الويب.
أولاً، يتم إنشاء مواقع الويب باستخدام الكود. والأكثر شيوعًا هي 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 Windows
3. قم بتثبيت المكتبات والأدوات: أوصيك بتثبيت Requests وSelenium وBeautifulSoup وScrapy للبدء. يمكنك تثبيتها باستخدام "pip install"الأمر، فقط افتح المحطة الطرفية وقم بتشغيل الأمر التالي:
pip install requests beautifulsoup4 scrapy selenium
أساسيات كشط البيانات من الويب 101: الأخلاقيات وأفضل الممارسات
انتظر قليلاً. قبل الخوض في الجوانب الفنية، دعنا نفحص التبعات الأخلاقية وأفضل الممارسات المتعلقة بكشط البيانات من الويب.
يعرف كل كاشط هذا إلى حد ما، ولكن يتعين على المبتدئين فهم الإرشادات التالية حتى يتمكنوا من البقاء ضمن الحدود:
- احترم ملف Robots.txt: أول قاعدة في استخراج البيانات هي أنه يجب عليك احترام ملف Robots.txt. إنه ملف نصي موجود في كل موقع ويب يتيح للجميع معرفة ما يمكن استخراجه وما لا يمكن استخراجه.
- احترم شروط خدمة الموقع: تحقق من شروط خدمة الموقع لمعرفة ما إذا كان كشط الويب مسموحًا به.
- الحد من تكرار عمليات الكشط والتأثير على الخوادم: تجنب تقديم عدد كبير جدًا من الطلبات في فترة زمنية قصيرة. وتجنب أيضًا تحميل الخادم بشكل زائد عن الحد من خلال تنفيذ فترات تأخير بين الطلبات.
- استخدم واجهات برمجة التطبيقات (إن وجدت): قبل استخراج البيانات، تحقق مما إذا كان الموقع يوفر واجهة برمجة تطبيقات للوصول إلى البيانات. دعني أخبرك عن المرات التي عملت فيها على أداة استخراج البيانات فقط لأكتشف أن واجهة برمجة التطبيقات متاحة، لكنني لم أكلف نفسي عناء التحقق. إن استخدام واجهة برمجة التطبيقات أسهل كثيرًا (صدقني) لأنها توفر بيانات منظمة.
- الاعتبارات القانونية: راجع القوانين للتأكد من عدم انتهاكك لأي حقوق ملكية فكرية أو انتهاك أي قاعدة. إذا لم تكن متأكدًا، فمن الأفضل أن تستشير محاميًا أولاً.
البدء في استخدام Web Scraping: التقنيات الأساسية
حسنًا، لقد انتهينا من النظرية والمفاهيم، فلنبدأ العمل. أول شيء ستتعلمه هو كيفية إرسال طلبات HTTP.
إرسال طلبات HTTP (GET، POST) باستخدام مكتبة طلبات 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. الكشف عن وجود "Next"الزر ": تستخدم بعض المواقع الإلكترونية زر "Next"زر "" بدلاً من أرقام الصفحات الصريحة. في مثل هذه الحالات، يمكنك التحقق من وجود ""Next"اضغط على الزر واستمر في الكشط حتى يختفي.
التعامل مع المواقع الديناميكية وتقديم JavaScript
باعتبارك من مستخدمي المواقع الإلكترونية، فمن المؤكد أنك ستصادف مواقع إلكترونية تفاعلية ومعقدة للغاية، وذلك بهدف تحسين تجربة المستخدم. تعتمد هذه الأنواع من المواقع الإلكترونية بشكل كبير على JavaScript، وتُسمى عمومًا مواقع إلكترونية ذات محتوى ديناميكي.
ولكن ما كل هذا الجدل حول هذا الأمر؟ تكمن المشكلة في أن الكود المصدري في هذه المواقع قد لا يحتوي على البيانات المطلوبة، كما أن استخراج البيانات منها يشكل تحديًا.
هذا هو الوقت الذي يتعين عليك فيه استخدام أدوات مثل 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 هو أفضل ما يمكنك استخدامه للمواقع الديناميكية، إلا أنه يتعين عليك استكشاف البدائل لمعرفة ما يناسبك بشكل أفضل.
قد يكون Scrapy-Splash خيارًا. إنه دمج متصفح بدون واجهة مستخدم مع إطار عمل Scrapy. يسمح باستخراج البيانات بكفاءة أكبر بسبب البنية الأساسية للشبكة غير الحاجزة لـ Scrapy والميزات المتقدمة لـ Splash لعرض صفحات الويب الديناميكية بسرعة.
Requests-html هو بديل آخر، حيث إنه يوسع وظائف مكتبة الطلبات عن طريق إضافة دعم لعرض JavaScript والتفاعل مع صفحات الويب.
تقنيات متقدمة لاستخراج بيانات الويب
عندما تبدأ في إحراز تقدم، ستلاحظ أنك تتعامل مع بعض سيناريوهات الكشط، ولكنك تواجه أيضًا سيناريوهات معقدة تتطلب تقنيات أكثر تقدمًا.
التعامل مع المصادقة وملفات تعريف الارتباط
تتطلب بعض مواقع الويب المصادقة أو استخدام ملفات تعريف الارتباط لإدارة جلسات المستخدم. يمكنك التعامل مع المصادقة عن طريق إرسال بيانات اعتماد تسجيل الدخول مع طلباتك وإدارة ملفات تعريف الارتباط باستخدام مكتبات مثل requests أو http.cookiejar.
تجنب الكشف والحظر
قد تستخدم مواقع الويب تدابير للكشف عن أنشطة كشط الويب وحظرها. لتجنب الكشف، يمكنك استخدام تقنيات مثل تدوير وكلاء المستخدم واستخدام وكلاء وإدخال تأخيرات عشوائية بين الطلبات.
تخزين البيانات في قواعد البيانات
بدلاً من حفظ البيانات المجمعة في ملفات، يمكنك تخزينها في قواعد بيانات لتخزينها واسترجاعها بكفاءة أكبر. تتضمن الخيارات الشائعة قواعد بيانات SQL مثل MySQL وPostgreSQL، وقواعد بيانات NoSQL مثل MongoDB.
استخراج واجهات برمجة التطبيقات ومعالجة بيانات JSON
مرحبًا! لقد وجدت واجهة برمجة التطبيقات. لكنها بتنسيق JSON. ماذا يمكنك أن تفعل؟ يمكنك استخدام مكتبات مثل requests لإجراء طلبات API وتحليل استجابات JSON باستخدام وحدة json في Python.
الكشط المتوازي وغير المتزامن
لتسريع عملية الكشط، يمكنك الاستفادة من تقنيات المعالجة المتوازية والبرمجة غير المتزامنة. يمكن أن تساعدك المكتبات مثل المعالجة المتعددة والترابط والبرمجة غير المتزامنة في بايثون في تحقيق ذلك.
جمع كل شيء معًا: مشاريع استخراج البيانات من الويب في العالم الحقيقي
باعتباري مبتدئًا، عندما بدأت تدريبي على الكشط، شعرت أنني أعرف تمامًا ما يجب عليّ فعله، حتى اضطررت إلى القيام بذلك. لا جدوى من القراءة فقط، بل عليك اختبار مهاراتك من خلال الممارسة.
وهل هناك طريقة أفضل للقيام بذلك من العمل على مشاريع حقيقية؟
دعونا نلقي نظرة على بعض الأمثلة مع عملية خطوة بخطوة:
المثال 1: استخراج مقالات الأخبار وتحليل المشاعر
- تخطيط عملية الكشط:
- حدد موقع الأخبار الذي تريد استخراج البيانات منه
- تحديد هيكل المقالات (العنوان، المحتوى، التاريخ، الخ.)
- تخطيط تنسيق تخزين البيانات (على سبيل المثال، CSV، قاعدة البيانات)
- تنفيذ الكاشطة:
- استخدم الطلبات لجلب محتوى HTML لموقع الأخبار
- تحليل HTML باستخدام BeautifulSoup لاستخراج معلومات المقالة
- التعامل مع الترقيم الصفحي والتنقل عبر صفحات متعددة
- قم بتخزين البيانات المجمعة بالتنسيق المختار
- تحليل وتصور البيانات المجمعة:
- قم بإجراء تحليل المشاعر على محتوى المقالة باستخدام مكتبات مثل NLTK أو TextBlob
- تصور درجات المشاعر باستخدام مكتبات مثل Matplotlib أو Plotly
- تحديد الاتجاهات والأنماط في مشاعر الأخبار بمرور الوقت
المثال 2: بناء أداة لمراقبة الأسعار
- استخراج معلومات المنتج من مواقع التجارة الإلكترونية:
- تحديد مواقع التجارة الإلكترونية التي سيتم استخراج البيانات منها
- تحديد هيكل معلومات المنتج (الاسم، السعر، التوفر، الخ.)
- استخدم تقنيات كشط الويب لاستخراج بيانات المنتج من مواقع ويب متعددة
- إعداد التنبيهات والإشعارات:
- تحديد حدود الأسعار أو معايير التوفر لكل منتج
- تنفيذ آلية لمقارنة الأسعار المجمعة مع الحدود المحددة
- إعداد إشعارات البريد الإلكتروني أو الرسائل القصيرة لتنبيه المستخدمين عند انخفاض الأسعار أو توفر المنتجات
- نشر الكاشطة على السحابة:
- اختر منصة سحابية (على سبيل المثال، AWS، Google Cloud، Heroku)
- قم بتكوين البيئة والتبعيات اللازمة
- جدولة الكاشطة لتشغيلها على فترات منتظمة
- قم بتخزين البيانات المجمعة في قاعدة بيانات سحابية لسهولة الوصول إليها ومراقبتها
أطر وأدوات كشط الويب
أعلم أن مصطلحي "الإطار" و"المكتبة" يُستخدمان بالتبادل، لكنهما يعنيان أشياء مختلفة، ويُستخدمان لأغراض مختلفة.
باستخدام مكتبات مثل Request أو BeautifulSoup، يمكنك إنشاء أدوات استخراج بيانات الويب من الصفر. ومع ذلك، باستخدام الأطر، يمكنك تبسيط العملية لأنها عبارة عن مجموعة من الأدوات والمكتبات.
لننظر إلى الأمر بهذه الطريقة، فالمكتبات تشبه السيارات التي يتم التحكم فيها يدويًا، حيث تمنحك التحكم الكامل ولكنها تتطلب المزيد من الجهد والمهارة للتنقل. في حين أن الأطر تشبه السيارات الأوتوماتيكية؛ فهي توفر تجربة أكثر سلاسة وكفاءة من خلال تبسيط العديد من الجوانب المملة لعملية الكشط.
بعض الخيارات الأكثر شعبية هي:
Scrapy
Scrapy هو إطار عمل للغة Python مع نظام بيئي كامل لبناء أدوات كشط ويب قابلة للتطوير وفعالة. ميزاته الرئيسية هي:
- سريع حسب التصميم.
- لا حاجة لإضافة كود لإنشاء ملفات CSV وJSON وغيرها.
- دعم XPath وCSS Selectors.
- نظام بيئي تمديدي رائع، مثل دعم البرامج الوسيطة.
- التكامل مع خطوط أنابيب العناصر لمعالجة البيانات وتخزينها
PySpider
PySpider هو أيضًا إطار عمل لـ Python، ولكن على عكس Scrapy، فهو متوافق مع JavaScript، وهي الميزة الأقوى فيه. كما أنه رائع للمبتدئين. تتضمن ميزاته الرئيسية ما يلي:
- دعم عرض JavaScript باستخدام PhantomJS أو Puppeteer
- قائمة مهام مدمجة ومجدولة
- التكامل مع قواعد البيانات وطوابير الرسائل
- يدعم التزامن
أدوات وخدمات كشط الويب
بالإضافة إلى الأطر، هناك بعض الأدوات والخدمات التي تساعدك على تسهيل عملية الكشط. وأفضل ما في الأمر هو أنها تتطلب الحد الأدنى من الترميز. ومن بين الخيارات المتاحة:
- Octoparse:أداة كشط ويب تعتمد على السحابة مع واجهة النقر والنقر لاستخراج البيانات من مواقع الويب.
- ParseHub:تطبيق سطح مكتب يسمح لك بإنشاء كاشطات ويب من خلال تحديد العناصر بصريًا على صفحة الويب.
- Import.io:منصة تعتمد على الويب توفر أدوات لاستخراج البيانات من مواقع الويب وواجهات برمجة التطبيقات.
تلخيص أساسيات استخراج البيانات من الويب
في هذا الدليل، قمنا بتغطية أساسيات كشط الويب على نطاق واسع، مثل فهم بنية موقع الويب، والاعتبارات الأخلاقية، والتقنيات الأساسية والمتقدمة، والأدوات والأطر الإضافية.
أنت مستعد للبدء، ولكن فكر في توسيع نطاق معرفتك من خلال قراءة الموارد الإضافية، مثل الوثائق الرسمية للمكتبات والأطر، ودروس كشط الويب.
حاول أيضًا طلب التوجيه من خبراء الكشط في مجتمعات ومنتديات الكشط. لا تنعزل، فنحن بحاجة إلى بعضنا البعض.
لقد كنا جميعًا مبتدئين ذات يوم، لذا كن لطيفًا مع نفسك، وابدأ بخطوات صغيرة وتدرب بانتظام. ومع الممارسة الكافية والتفاني، سترى كيف ستتمكن من التعامل مع مشاريع أكثر تعقيدًا مع تقدمك.