Web scraping & Automation<--> Ai Engineering
123 subscribers
5 photos
8 links
Download Telegram
## 🎓 المحاضرة الرابعة: استخراج البيانات من موقع فعلي (تطبيق عملي كامل)

### 🌐 الموقع التجريبي: [quotes.toscrape.com](http://quotes.toscrape.com)

هذا الموقع مخصص لتجربة Web Scraping ويحتوي على اقتباسات ومؤلفين وتاغات.
### الهدف:

نريد استخراج:

1. جميع الاقتباسات (Quotes).
2. اسم المؤلف.
3. الكلمات المفتاحية (Tags).

---

### 🛠️ الكود الكامل مع شرح:

import requests
from bs4 import BeautifulSoup

url = "http://quotes.toscrape.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

quotes = soup.find_all('div', class_='quote')

for quote in quotes:
    text = quote.find('span', class_='text').text
    author = quote.find('small', class_='author').text
    tags = [tag.text for tag in quote.find_all('a', class_='tag')]

    print("📌 الاقتباس:", text)
    print("✍️ المؤلف:", author)
    print("🏷️ الكلمات المفتاحية:", tags)
    print("-" * 50)

---

### 🔍 شرح الكود:

| السطر                                  | الوظيفة                             |
| -------------------------------------- | ----------------------------------- |
| soup.find_all('div', class_='quote') | إيجاد كل صناديق الاقتباس            |
| find('span', class_='text')          | جلب نص الاقتباس                     |
| find('small', class_='author')       | جلب اسم المؤلف                      |
| find_all('a', class_='tag')          | استخراج كل التاغات (داخل كل اقتباس) |

---

### 🧪 النتيجة (مثال):

📌 الاقتباس: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
✍️ المؤلف: Albert Einstein
🏷️ الكلمات المفتاحية: ['change', 'deep-thoughts', 'thinking', 'world']
--------------------------------------------------

---

### 💪 تمرين إضافي:

⬅️ انتقل للصفحة التالية من الموقع (http://quotes.toscrape.com/page/2/)
وعدّل الكود ليقرأ الاقتباسات منها أيضًا.
🔥1
import requests from bs4 import BeautifulSoup base_url = "http://quotes.toscrape.com" url = "/page/1/" while url: print(f"🔄 قراءة الصفحة: {base_url}{url}") response = requests.get(base_url + url) soup = BeautifulSoup(response.text, "html.parser") quotes = soup.find_all("div", class_="quote") for quote in quotes: text = quote.find("span", class_="text").text author = quote.find("small", class_="author").text tags = [tag.text for tag in quote.find_all("a", class_="tag")] print("📌 الاقتباس:", text) print("✍️ المؤلف:", author) print("🏷️ الكلمات المفتاحية:", tags) print("-" * 50) # نحاول العثور على رابط الصفحة التالية next_btn = soup.find("li", class_="next") if next_btn: url = next_btn.find("a")["href"] else: url = None ``
🔍 شرح مبسط:
الكودالوظيفةwhile url:نكرر طالما هناك صفحة قادمةsoup.find_all(...)استخراج كل الاقتباسات من الصفحةnext_btn = soup.find(...)البحث عن زر الصفحة التاليةnext_btn.find("a")["href"]استخراج رابط الصفحة التالية (مثلاً: /page/2/)
ماذا يفعل البرنامج الآن؟
🔁 يقوم بالخطوات التالية:
يبدأ من الصفحة الأولى.
يجمع الاقتباسات والمؤلفين والكلمات المفتاحية.
ينتقل تلقائيًا إلى الصفحة التالية.
يكرر العملية حتى تنتهي الصفحات.

-------------------------------------------------------
التعامل مع الصفحات الديناميكية باستخدام Selenium وJavaScript**

---

## ما ستتعلمه:

* ما هي الصفحات الديناميكية؟
* الانتظار حتى يتم تحميل العناصر.
* تنفيذ أوامر JavaScript داخل الصفحة.
* التعامل مع المواقع التي تستخدم Lazy Loa

## ⚙️ 1. ما هي الصفحات الديناميكية؟

الصفحات الديناميكية لا تعرض كل البيانات مباشرة عند تحميل الصفحة. بل يتم تحميل المحتوى جزئيًا باستخدام JavaScript بعد فتح الصفحة (مثل مواقع التواصل).

---

## 🕒 2. الانتظار حتى تظهر العناصر – WebDriverWait

### مثال:

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

driver.get("https://example.com")

element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "dynamicElement"))
)

💡 هذا الكود ينتظر 10 ثوانٍ كحد أقصى حتى يظهر عنصر معين.

---

## 💡 3. تنفيذ JavaScript داخل الصفحة

أحيانًا تحتاج لتنفيذ JavaScript داخل المتصفح مباشرة، مثل التمرير للأسفل.

### مثال:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

---

## ♾️ 4. التعامل مع صفحات الـ Infinite Scroll

### مثال:

import time

last_height = driver.execute_script("return document.body.scrollHeight")

while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)

new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height

🔁 هذا الكود يقوم بالتمرير للأسفل باستمرار حتى لا يتم تحميل محتوى جديد.

---

## 🎯 تطبيق عملي:

جرّب فتح موقع مثل [quotes.toscrape.com/scroll](http://quotes.toscrape.com/scroll) واكتب سكربت يقوم بتمرير الصفحة حتى النهاية وجمع كل الاقتباسات المعروضة.



:)
2
معليش اذا في بعض الكلمات غير واضحة بس انا برسل لي Ai ليعييد تنسيق النصوص🔥❤️
والمهم الان سندخل في الجزئية الصعبة والمهمة
ان شاءالله يوم الاربعاء سيكون في محادثة جماعية في القناة للجواب عن الاسئلة والنقاش لمدة ساعة❤️
المحاضره الخامسه...
# 🎓 المحاضرة 5_1: التعامل مع النماذج (Forms) وتسجيل الدخول تلقائيًا باستخدام Selenium

---

## ما ستتعلمه:

* كيفية ملء حقول الإدخال مثل البريد وكلمة المرور.
* الضغط على أزرار مثل "Login" أو "Submit".
* تسجيل الدخول إلى مواقع تتطلب مصادقة.

---

## 🧾 1. ملء الحقول النصية في نموذج تسجيل دخول

### مثال:

from selenium import webdriver
from selenium.webdriver.common.by import By

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

# تعبئة البريد الإلكتروني
driver.find_element(By.NAME, "email").send_keys("test@example.com")

# تعبئة كلمة المرور
driver.find_element(By.NAME, "password").send_keys("yourpassword")

---

## 🟩 2. الضغط على زر الدخول (Login Button)

### مثال:

driver.find_element(By.XPATH, "//button[@type='submit']").click()
أو باستخدام By.ID, By.CLASS_NAME, إلخ حسب الزر.

---

## 🛡️ 3. الانتظار حتى يتم تسجيل الدخول بنجاح

### مثال:

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

WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "dashboard"))
)

---

## 🔐 4. تطبيق عملي على موقع وهمي للتسجيل

### مثال عملي على موقع [httpbin.org/forms/post](https://httpbin.org/forms/post):

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://httpbin.org/forms/post")

driver.find_element(By.NAME, "custname").send_keys("Ali")
driver.find_element(By.NAME, "custtel").send_keys("123456789")
driver.find_element(By.NAME, "custemail").send_keys("ali@example.com")
driver.find_element(By.XPATH, "//button[@type='submit']").click()

---

## ⚠️ نصيحة أمنية

لا تستخدم كلمات مرور حقيقية أو حساباتك الأساسية أثناء التجارب.

---

## الآن أصبح بإمكانك:

* التعامل مع أي نموذج تسجيل.
* تسجيل الدخول آليًا إلى مواقعك.
* تنفيذ أي عملية تتطلب إدخال بيانات.
:)
🙏2
# 🎓 المحاضرة 5_2: التعامل مع ملفات الـ Cookies وجلسات المستخدم (Sessions) في Web Automation

---

## ما ستتعلمه:

* ما هي ملفات الكوكيز وكيف تُستخدم.
* كيف تحفظ جلسة تسجيل الدخول.
* كيفية إعادة استخدامها لتجنب تسجيل الدخول كل مرة.

---

## 🍪 1. ما هي Cookies؟

Cookies هي ملفات نصية صغيرة يخزنها المتصفح تحتوي على معلومات عن الجلسة، مثل:

* أنك قمت بتسجيل الدخول.
* معلومات سلة التسوق.
* تفضيلاتك على الموقع.

---

## 🧪 2. عرض الكوكيز الموجودة في المتصفح

driver.get("https://example.com")
cookies = driver.get_cookies()
for cookie in cookies:
print(cookie)

---

## 💾 3. حفظ الكوكيز في ملف

import json

with open("cookies.json", "w") as f:
json.dump(driver.get_cookies(), f)

---

## 🔁 4. تحميل الكوكيز لاحقًا لإعادة استخدام الجلسة

import json
from selenium import webdriver
from selenium.webdriver.common.by import By

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

# تحميل الكوكيز
with open("cookies.json", "r") as f:
cookies = json.load(f)

for cookie in cookies:
driver.add_cookie(cookie)

# إعادة تحميل الصفحة بعد إضافة الكوكيز
driver.refresh()

---

## 📌 نقطة مهمة:

* يجب أن تفتح نفس النطاق (example.com) قبل إضافة الكوكيز.
* الكوكيز تنتهي أحيانًا، لذا تأكد من صلاحيتها.

---

## 🛠️ تطبيق عملي:

سجّل الدخول لموقع، احفظ الكوكيز في ملف، ثم أغلق المتصفح، وأعد تشغيله مع تحميل الكوكيز فقط، دون الحاجة لتسجيل الدخول من جديد.

---

## بعد هذه المحاضرة، يمكنك:

* حفظ جلسات المستخدم.
* تقليل عدد مرات تسجيل الدخول.
* تسريع أتمتة التعامل مع المواقع المقفلة.
:)
2🙏2
🎓 المحاضرة 5_3: التعامل مع ملفات الـ Cookies وجلسات المستخدم (Sessions) في Web Automation
ما ستتعلمه:
ما هي ملفات الكوكيز وكيف تُستخدم.
كيف تحفظ جلسة تسجيل الدخول.
كيفية إعادة استخدامها لتجنب تسجيل الدخول كل مرة.
🍪 1. ما هي Cookies؟
Cookies هي ملفات نصية صغيرة يخزنها المتصفح تحتوي على معلومات عن الجلسة، مثل:
أنك قمت بتسجيل الدخول.
معلومات سلة التسوق.
تفضيلاتك على الموقع.
🧪 2. عرض الكوكيز الموجودة في المتصفح
driver.get("https://example.com") cookies = driver.get_cookies() for cookie in cookies: print(cookie)
💾 3. حفظ الكوكيز في ملف
import json with open("cookies.json", "w") as f: json.dump(driver.get_cookies(), f)
🔁 4. تحميل الكوكيز لاحقًا لإعادة استخدام الجلسة
import json from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") # تحميل الكوكيز with open("cookies.json", "r") as f: cookies = json.load(f) for cookie in cookies: driver.add_cookie(cookie) # إعادة تحميل الصفحة بعد إضافة الكوكيز driver.refresh()
📌 نقطة مهمة:
يجب أن تفتح نفس النطاق (example.com) قبل إضافة الكوكيز.
الكوكيز تنتهي أحيانًا، لذا تأكد من صلاحيتها.
🛠️ تطبيق عملي:
سجّل الدخول لموقع، احفظ الكوكيز في ملف، ثم أغلق المتصفح، وأعد تشغيله مع تحميل الكوكيز فقط، دون الحاجة لتسجيل الدخول من جديد.
بعد هذه المحاضرة، يمكنك:
حفظ جلسات المستخدم.
تقليل عدد مرات تسجيل الدخول.
تسريع أتمتة التعامل مع المواقع المقفلة.
:)
🙏2
ان شاءالله من الغد نواصل المحاضرات
وعيد مبارك عليكم ❤️
🙏3
المحاضره السادسه....
🎓 المحاضرة 6-1: التعامل مع القوائم والجداول – استخراج البيانات المنظمة
ما ستتعلمه في هذه المحاضرة:
كيفية استخراج قوائم متعددة وجداول من صفحات الويب.
التعامل مع عناصر متكررة (مثل صفوف في جدول أو بطاقات في صفحة).
استخدام find_elements بدلاً من find_element.
🧠 المبدأ الأساسي:
في المواقع التي تحتوي على عناصر متكررة (مثل قائمة منتجات أو نتائج بحث)، نستخدم find_elements لاستخراج كل العناصر مرة واحدة.
💻 مثال عملي: استخراج قائمة مقالات
📋 استخراج بيانات من جدول

rows = driver.find_elements(By.XPATH, "//table[@id='data']//tr") for row in rows: cells = row.find_elements(By.TAG_NAME, "td") for cell in cells: print(cell.text, end="\t") print() `
🔍 نصائح هامة:
تأكد أن العناصر مرئية في الصفحة قبل البحث عنها.
يمكنك استخدام XPath و CSS Selector للحصول على دقة أعلى.
دائماً افحص الصفحة باستخدام أدوات المطور (Inspect).
🧪 تطبيق عملي:
ادخل على موقع فيه جدول أو قائمة (مثلاً: قائمة أفلام، منتجات، مقالات).
استخرج كل العناصر في القائمة واطبعها.
جرب حفظها في ملف CSV.
بعد هذه المحاضرة، يمكنك:
قراءة وتحليل جداول HTML من الويب.
بناء أدوات لجمع بيانات منظمة من صفحات متعددة.
التعامل مع العناصر المتكررة بطريقة برمجية احترافية.
🎓 المحاضرة 6-2: التفاعل مع عناصر الصفحة – الضغط، الكتابة، التحديد
ما ستتعلمه في هذه المحاضرة:
كيف تجعل الروبوت يتفاعل مع العناصر في صفحة الويب.
الضغط على الأزرار، ملء الحقول النصية، تحديد منسدلات.
محاكاة المستخدم الحقيقي خطوة بخطوة.
🧠 المبدأ الأساسي:
نستخدم Selenium WebDriver للتحكم بالعناصر كما يفعل الإنسان:
click() للضغط.
send_keys() للكتابة داخل حقول.
select لاختيار عناصر منسدلة.
💻 أمثلة عملية
🖱️ الضغط على زر:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") # الضغط على زر button = driver.find_element(By.ID, "submit-btn") button.click()
⌨️ الكتابة داخل حقل:
search_box = driver.find_element(By.NAME, "search") search_box.send_keys("Web scraping")
📑 اختيار من قائمة منسدلة:
from selenium.webdriver.support.ui import Select dropdown = Select(driver.find_element(By.ID, "country")) dropdown.select_by_visible_text("Egypt")
⚠️ ملاحظات هامة:
بعض العناصر تتطلب انتظار حتى تظهر.
تأكد من أن العنصر قابل للنقر أو للكتابة فيه.
استخدم WebDriverWait عند الضرورة.
🧪 تطبيق عملي:
افتح موقع تسجيل دخول.
أدخل اسم المستخدم وكلمة المرور.
اضغط زر "تسجيل الدخول".
بعد هذه المحاضرة، يمكنك:
إنشاء برامج تقوم بالتسجيل التلقائي أو البحث.
بناء روبوتات تتفاعل مع واجهات الويب الذكية.
التحكم الكامل بأي عنصر في الصفحة.
🎓 المحاضرة 6-3: التعامل مع النوافذ، التبويبات، والإطارات (Windows, Tabs, Frames)
ما ستتعلمه في هذه المحاضرة:
كيف تتعامل مع أكثر من تبويب أو نافذة في المتصفح.
كيفية الدخول إلى الإطارات (iframes) داخل الصفحة.
التنقل بين النوافذ دون فقدان السيطرة.
🧠 المفهوم الأساسي:
النوافذ والتبويبات (Tabs/Windows):
يتم التحكم فيها من خلال window_handles و switch_to.window.
الإطارات (iframes):
محتوى داخل الصفحة، يتم التعامل معه بشكل منفصل عبر switch_to.frame.
💻 أمثلة برمجية
🪟 التنقل بين النوافذ:
from selenium import webdriver driver = webdriver.Chrome() driver.get("https://example.com") # فتح تبويب جديد driver.execute_script("window.open('https://google.com');") # الانتقال إلى التبويب الثاني driver.switch_to.window(driver.window_handles[1]) # العودة للتبويب الأول driver.switch_to.window(driver.window_handles[0])
🧩 الدخول إلى iframe:
# التبديل إلى iframe بالاسم أو ID driver.switch_to.frame("frame_id") # تنفيذ عمليات داخل الـ iframe... # الرجوع للإطار الرئيسي driver.switch_to.default_content()
⚠️ تنبيهات:
لا يمكنك الوصول لعناصر داخل iframe إلا بعد الدخول إليه.
التبديل بين النوافذ مهم لتجنب "Element not found".
استخدم WebDriverWait إذا تأخرت النوافذ في التحميل.
🧪 تطبيق عملي مقترح:
افتح صفحة بها iframe مثل w3schools iframe example.
اقرأ محتوى داخل الـ iframe باستخدام Selenium.
ثم انتقل لنافذة أخرى، وابدأ عملية بحث.
بعد هذه المحاضرة يمكنك:
بناء روبوتات تتنقل بين أكثر من موقع في وقت واحد.
قراءة بيانات من داخل iframes بكل سهولة.
العمل على صفحات ديناميكية بمرونة أكبر.
:)
فتح محادثة مناقشة والرد على جميع الاسئلة على حسب التفاعل متى تريدون
Anonymous Poll
50%
مساء اليوم
50%
مساء اليوم الثاني
غدا ان شاءالله pm 7:30 ksa
ستكون محادثة جماعية للاجابة عن جميع الاسئلة في هذا المجال
👍2
اسفين على التأخر في المحاضرات
بعد ربع ساعة ان شاءالله هفتح المحادثة الصوتية لاستقبال الاسئلة
1