4.5الأتمتة واستخراج الويب
الأساسي في 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) (أو منع الدخول/الشروط)، استعملها — فالاستخراج يأتي أخيرا، أبدا ضد القواعد.
🔎 مثال ملموس — 🔎 مثال ملموس — رصد أسعار نبيل
مستخرج نبيل المهذب، مع الواجهات الحقيقية :
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، وشروط الاستعمال) : ما يمكن جمعه، وبأي إيقاع — تُقرأ قبل أول طلب.
مثال بسيط: يقرأ نبيل الاثنين، ويباعد طلباته ويتحول إلى الواجهة الرسمية.
ما ليس كذلك: استخراج مكثف لموقع يمنع.
رد فعل: مرخص + مباعد + مسجل، أو نمتنع.
في التطبيق — عمليا — أتمت ثم استخرج بأدب
- اختر مهمة مكررة واحدة، واحسب عائدها (وقت/أسبوع مقابل وقت التطوير) وأتمتها مع pathlib/pandas.
- أضف السجلات وtry موجهة مع تنبيهات، واختبر على نسخ — أبدا على الأصول.
- قبل أي استخراج : اقرأ الشروط + robots.txt، وابحث عن واجهة رسمية، وتوقع المهلة ووكيل المستعمل والمهل.
- استخرج (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.
- القصف دون مهلة (حظر مؤكد).
- إطلاق سكربت مدمر دون اختبار.
النقاط الأساسية
- أتمت المكرر المربح : pathlib و openpyxl/pandas و smtplib — والعائد محسوب.
- الثنائي الساكن : REQUESTS (يجلب) + BEAUTIFULSOUP (يحلل HTML).
- SELENIUM = متصفح مُقاد للـ JS ؛ والواجهة الرسمية مفضلة على الاستخراج.
- الأدب : robots.txt والمهل ووكيل المستعمل ؛ والموثوقية : السجلات ونسخ الاختبار والجدولة.
تحدي 48 ساعة — طبق غدا
أتمت مهمة مكررة واحدة (العائد محسوب، مختبرة على نسخ) أو استخرج صفحتين مرخصتين (الشروط مقروءة) مع مهل + سجلات.
- أستطيع ذكر العائد و requests و BeautifulSoup و Selenium.
- أعرف شرح الشروط/robots.txt + المهل.
- عندي سكربت موثوق أو جمع مهذب يدور.
أسئلة شائعة
هل استخراج الويب قانوني ؟
حسب الحال : فشروط الموقع وrobots.txt والحقوق على البيانات (منها الشخصية) وإيقاع الجمع — كلها تؤطر المسموح. وقواعد نبيل : اقرأ الشروط + robots.txt قبل أول طلب، وباعد الطلبات، وفضل الواجهة الرسمية، ولا تجمع أبدا بيانات شخصية دون أساس قانوني، واعرض على قانوني عند الشك أو الاستعمال المهني.
هل تكفي requests أم يلزم Selenium ؟
تكفي requests + BeautifulSoup حين تكون البيانات في HTML الأولي (صفحات ساكنة) : سريعة وخفيفة. ويصير Selenium ضروريا حين يتولد المحتوى بالجافاسكريبت (تحميل ديناميكي، تمرير لانهائي) : فيقود متصفحا حقيقيا، أثقل وأبطأ. نبدأ ساكنا، وننتقل إلى المتصفح فقط عند الحاجة.
أي ثنائي لاستخراج الصفحات الساكنة ؟