4.5 · الأتمتة واستخراج الويب

المستوى 4 · التخصصات (الويب، البيانات، الذكاء الاصطناعي، الأتمتة)

4.5الأتمتة واستخراج الويب

الهدف: أتمتة مهمة مكررة واستخراج صفحة بأدب (requests و BeautifulSoup والمهل) — لكسب ساعات كل أسبوع دون حظر ودون خرق القواعد.
الوقت المقدّر: 14 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • العائد أولا : مهمة 30 دقيقة/أسبوع + سكربت ساعتين = مربح في شهر ؛ وpathlib و openpyxl/pandas و logging عدة.
  • الثنائي الساكن : requests.get يجلب (المهلة، وكيل المستعمل)، وBeautifulSoup يحلل (select) ؛ وSelenium يقود متصفحا للجافاسكريبت.
  • منعكس نبيل : ملف robots.txt + الشروط قبل أول طلب، ومهل بين الطلبات، والواجهة الرسمية مفضلة على الاستخراج.

حالة مصغرة متسلسلة — نبيل يؤتمت رصد أسعاره

كل اثنين، يرفع نبيل، في الجزائر، أسعارا عمومية يدويا لرصده التنافسي : 30 دقيقة نسخ-لصق. كتب سكربتا مهذبا : يقرأ ملف robots.txt وشروط الموقع، ويباعد طلباته بثانيتين مع وكيل مستعمل معرَّف، ويستخرج الأسعار مع BeautifulSoup ويخزنها في CSV مع سجلات. ومتى اقترح الموقع واجهة رسمية، تحول إليها. آخر محطة في الخيط الرابط : المحلل الذي كسب أيام الاثنين — بنظافة.

آخر حالة في الخيط الرابط 4.1-4.5 — نبيل يختم تخصصاته.

1. أتمتة ما هو مربح

نؤتمت ما هو مكرر : الملفات والجداول (openpyxl/pandas) والتقارير والرسائل — مع pathlib للمسارات. والقاعدة : احسب العائد قبل الترميز (30 دقيقة/أسبوع مقابل ساعتين تطوير = مربح في شهر). ونوثق : logging للتتبع، وtry موجهة مع تنبيهات، واختبارات على نسخ (أبدا على الأصول)، ثم جدولة (cron والمجدول) للدوران وحده. ويختبر نبيل إعادة تسميته على نسخ قبل لمس المجلدات الحقيقية.

2. استخراج مهذب : requests و BeautifulSoup و Selenium

للصفحات الساكنة : requests.get يحمّل (مع timeout وUser-Agent معرَّف)، وBeautifulSoup يحلل HTML (select(".prix"))، ونخزن في CSV. والأدب : قراءة robots.txt، ومباعدة الطلبات (time.sleep)، ولا تقصف أبدا — وإلا الحظر. وللجافاسكريبت والتمرير اللانهائي : Selenium يقود متصفحا حقيقيا، أثقل. والقاعدة الأم : إن وجدت واجهة رسمية (API) (أو منع الدخول/الشروط)، استعملها — فالاستخراج يأتي أخيرا، أبدا ضد القواعد.

خطأ شائع في الفهم: «إن كان متاحا في متصفحي، يحق لي استخراجه بكميات». خطأ. فالمتاح لا يعني المرخص : فالشروط وrobots.txt وحمايات إساءة الاستعمال والحقوق على البيانات (منها الشخصية) تؤطر الجمع. واستخراج موقع يمنع بسرعة وقوة يعرضك للحظر — وللنزاع. مهذب ومباعد ومرخص : أو نمتنع.
الاستخراج المهذب في 4 أوقات الترخيص ← الجلب ← الاستخراج ← التخزين الترخيص الشروط +robots.txt، وواجهة رسمية ؟الجلب requests + المهلة+ وكيل المستعملالاستخراج BeautifulSoupselect، مباعد (sleep)التخزين CSV + سجلات،مراقب ومجدول
الترخيص ← الجلب ← الاستخراج ← التخزين
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) يتحقق نبيل من الشروط وrobots.txt، ويفضل الواجهة الرسمية إن وجدت. 2) يجلب requests الصفحات بمهلة ووكيل مستعمل معرَّف. 3) يستخرج BeautifulSoup الحقول، والطلبات مباعدة بثانيتين. 4) تُخزَّن الأسعار في CSV مع سجلات وجدولة. الدرس : أتمت المر بح، واستخرج المرخص — بأدب.

🔎 مثال ملموس — 🔎 مثال ملموس — رصد أسعار نبيل

مستخرج نبيل المهذب، مع الواجهات الحقيقية :

r = requests.get(url, timeout=10, headers={"User-Agent": "veille-perso"})
prix = BeautifulSoup(r.text, "html.parser").select_one(".prix").text
logging.info("%s : %s", url, prix)  # كل شيء مسجل
time.sleep(2)  # أدب : باعد بين الطلبات

القراءة : اجلب وحلل وسجل وانتظر.

الدرس : المهلة + وكيل المستعمل + المهل = استخراج مهذب.

مفردات القسم

الأتمتة / العائد (ROI)
عهد المهام المكررة إلى سكربت (الملفات والجداول والتقارير) بعد التحقق أن الوقت المكسوب يتجاوز وقت التطوير.

مثال بسيط: نبيل : 30 دقيقة/أسبوع مكسوبة مقابل ساعتين تطوير، مربح في شهر.

ما ليس كذلك: أتمتة مهمة تُنجَز مرتين في السنة.

رد فعل: احسب العائد قبل الترميز.

requests + BeautifulSoup
ثنائي الصفحات الساكنة : requests تحمّل الصفحة، وBeautifulSoup يحلل HTML (select) لاستخراج الحقول.

مثال بسيط: يستخرج نبيل الأسعار العمومية مع select_one ويخزنها في CSV.

ما ليس كذلك: متصفح مُقاد لصفحة ساكنة بسيطة.

رد فعل: المهلة + وكيل المستعمل + طلبات مباعدة، دائما.

Selenium
قيادة متصفح حقيقي لصفحات الجافاسكريبت (محتوى محمّل، تمرير لانهائي) — قوي لكن أثقل.

مثال بسيط: يلجأ إليه نبيل حين لا تكون الأسعار في HTML الأولي.

ما ليس كذلك: قصف requests على محتوى مولد بـ JS.

رد فعل: Selenium فقط إن لم يكف الساكن.

robots.txt / الشروط
قواعد ولوج الموقع (ملف robots.txt، وشروط الاستعمال) : ما يمكن جمعه، وبأي إيقاع — تُقرأ قبل أول طلب.

مثال بسيط: يقرأ نبيل الاثنين، ويباعد طلباته ويتحول إلى الواجهة الرسمية.

ما ليس كذلك: استخراج مكثف لموقع يمنع.

رد فعل: مرخص + مباعد + مسجل، أو نمتنع.

في التطبيق — عمليا — أتمت ثم استخرج بأدب

  1. اختر مهمة مكررة واحدة، واحسب عائدها (وقت/أسبوع مقابل وقت التطوير) وأتمتها مع pathlib/pandas.
  2. أضف السجلات وtry موجهة مع تنبيهات، واختبر على نسخ — أبدا على الأصول.
  3. قبل أي استخراج : اقرأ الشروط + robots.txt، وابحث عن واجهة رسمية، وتوقع المهلة ووكيل المستعمل والمهل.
  4. استخرج (requests + BeautifulSoup)، وخزّن في CSV، وجدول (cron/المجدول) وراقب السجلات.
تكسب ساعات كل أسبوع بسكربتات موثوقة، وتجمع بيانات الويب بأدب — دون حظر ولا مخالفة.

نص جاهز للقول — تبرير جمعه (30 ثانية)

«معكم نبيل : الشروط وrobots.txt مقروءة قبل أول طلب، والواجهة الرسمية مفضلة، والطلبات مباعدة مع وكيل مستعمل معرَّف، وكل شيء مسجل في السجلات. أيام الاثنين مؤتمتة — وجمعنا قابل للدفاع.»

يُقال قبل أي نشر لمستخرج ؛ واعرض الشروط + السجلات.

نموذج نسخ-لصق — مستخرج مهذب (كود مختبر)

import csv
import logging
import time
import requests
from bs4 import BeautifulSoup

logging.basicConfig(level=logging.INFO)

URLS = ["https://example.com/page-1", "https://example.com/page-2"]
HEADERS = {"User-Agent": "veille-perso (contact : exemple@domaine.test)"}

# شرط مسبق : اقرأ https://example.com/robots.txt + الشروط،
# وفضل الواجهة الرسمية إن وجدت.
with open("prix.csv", "w", newline="", encoding="utf-8") as f:
    out = csv.writer(f)
    out.writerow(["url", "prix"])
    for url in URLS:
        r = requests.get(url, timeout=10, headers=HEADERS)
        r.raise_for_status()
        prix = BeautifulSoup(r.text, "html.parser").select_one(".prix").text.strip()
        out.writerow([url, prix])
        logging.info("%s : %s", url, prix)
        time.sleep(2)  # أدب : باعد بين الطلبات

مهمة مكتبية

إعادة التسمية والتقارير والرسائل : pathlib + pandas + السجلات، مختبرة على نسخ، ثم مجدولة.

رصد عرضي

مثل نبيل : بضع صفحات، مباعدة، مسجلة — يدور السكربت يوم الاثنين ولا يفكر فيه أحد.

صفحة جافاسكريبت

المحتوى غائب عن HTML ؟ يقود Selenium متصفحا — أثقل، ويُحفَظ لهذه الحالة.

جمع منتظم

الواجهة الرسمية متى وجدت : مستقرة ومرخصة وأسرع من أي استخراج.

حذر: الجمع يلزم مسؤوليتك : احترم الشروط وrobots.txt (إيقاع مباعد، وتوقف عند الرفض)، ولا تجمع ولا تنشر بيانات شخصية دون أساس قانوني، وعند الشك اعرض على قانوني قبل أي نشر إنتاجي. محتوى تعليمي، وأمثلة ببيانات وهمية.

✓ ممارسات جيدة

  • احسب العائد قبل الأتمتة.
  • اقرأ الشروط + robots.txt قبل أول طلب.
  • السجلات + الاختبارات على نسخ + طلبات مباعدة.

✗ أخطاء شائعة

  • الاستخراج دون قراءة الشروط ولا robots.txt.
  • القصف دون مهلة (حظر مؤكد).
  • إطلاق سكربت مدمر دون اختبار.

النقاط الأساسية

  • أتمت المكرر المربح : pathlib و openpyxl/pandas و smtplib — والعائد محسوب.
  • الثنائي الساكن : REQUESTS (يجلب) + BEAUTIFULSOUP (يحلل HTML).
  • SELENIUM = متصفح مُقاد للـ JS ؛ والواجهة الرسمية مفضلة على الاستخراج.
  • الأدب : robots.txt والمهل ووكيل المستعمل ؛ والموثوقية : السجلات ونسخ الاختبار والجدولة.

تحدي 48 ساعة — طبق غدا

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

قائمة الخروج من القسم
  • أستطيع ذكر العائد و requests و BeautifulSoup و Selenium.
  • أعرف شرح الشروط/robots.txt + المهل.
  • عندي سكربت موثوق أو جمع مهذب يدور.
تقييم ذاتي 1-5 : هل سكربتي مختبر ومسجل ؟هل جمعي مرخص ومباعد ؟

أسئلة شائعة

هل استخراج الويب قانوني ؟

حسب الحال : فشروط الموقع وrobots.txt والحقوق على البيانات (منها الشخصية) وإيقاع الجمع — كلها تؤطر المسموح. وقواعد نبيل : اقرأ الشروط + robots.txt قبل أول طلب، وباعد الطلبات، وفضل الواجهة الرسمية، ولا تجمع أبدا بيانات شخصية دون أساس قانوني، واعرض على قانوني عند الشك أو الاستعمال المهني.

هل تكفي requests أم يلزم Selenium ؟

تكفي requests + BeautifulSoup حين تكون البيانات في HTML الأولي (صفحات ساكنة) : سريعة وخفيفة. ويصير Selenium ضروريا حين يتولد المحتوى بالجافاسكريبت (تحميل ديناميكي، تمرير لانهائي) : فيقود متصفحا حقيقيا، أثقل وأبطأ. نبدأ ساكنا، وننتقل إلى المتصفح فقط عند الحاجة.

تحقّق من فهمك

أي ثنائي لاستخراج الصفحات الساكنة ؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 4أسئلة جديدة وأصعب للتحقق من مكتسباتك