ماذا سنبني اليوم؟
سنبني اليوم أداة بسيطة لتحليل أساسيات SEO لصفحة ويب محددة، وذلك باستخدام منهجية البرمجة المعتمدة على المهام (Task-Oriented Programming) في Python. ستساعدنا هذه المنهجية على تقسيم العملية المعقدة إلى مهام صغيرة، مستقلة، وقابلة لإعادة الاستخدام، مما يعزز وضوح الكود وسهولة صيانته.
فهم البرمجة المعتمدة على المهام (Task-Oriented Programming)
البرمجة المعتمدة على المهام هي منهجية تركز على تقسيم المشكلة الكبيرة إلى سلسلة من "المهام" المحددة بوضوح. كل مهمة هي وحدة عمل مستقلة تؤدي وظيفة معينة. الهدف هو بناء نظام حيث تتفاعل هذه المهام مع بعضها البعض لإنجاز الهدف النهائي.
في سياق الأتمتة والـ SEO، تعتبر البرمجة المعتمدة على المهام قوية بشكل خاص. فهي تسمح لك بتصميم سير عمل واضح، حيث يمكن لكل خطوة (مثل جلب البيانات، تحليلها، تخزينها، أو إرسال إشعار) أن تكون مهمة منفصلة. هذا يجعل الأتمتة أكثر مرونة، حيث يمكنك بسهولة إضافة مهام جديدة أو تعديل مهام موجودة دون التأثير على بقية النظام.
المهمة 1: جلب محتوى الصفحة (Fetch Page Content)
المهمة الأولى هي الحصول على محتوى HTML لصفحة الويب المستهدفة. سنستخدم مكتبة requests في Python للقيام بذلك.
import requests
def fetch_page_content(url):
"""
يجلب محتوى HTML لعنوان URL محدد.
:param url: عنوان URL للصفحة.
:return: محتوى HTML للصفحة كسلسلة نصية، أو None إذا حدث خطأ.
"""
try:
response = requests.get(url, timeout=10)
response.raise_for_status() # يرفع استثناء لأكواد الحالة الخاطئة (4xx أو 5xx)
return response.text
except requests.exceptions.RequestException as e:
print(f"خطأ في جلب المحتوى من {url}: {e}")
return None
المهمة 2: تحليل محتوى SEO (Parse SEO Data)
بعد الحصول على محتوى HTML، المهمة التالية هي تحليل هذا المحتوى لاستخراج بيانات SEO الأساسية مثل عنوان الصفحة (title)، الوصف التعريفي (meta description)، وعناوين H1. سنستخدم مكتبة BeautifulSoup لهذا الغرض.
from bs4 import BeautifulSoup
def extract_seo_data(html_content):
"""
يستخرج بيانات SEO الأساسية (العنوان، الوصف، H1s) من محتوى HTML.
:param html_content: محتوى HTML للصفحة.
:return: قاموس يحتوي على بيانات SEO.
"""
if not html_content:
return {"title": None, "meta_description": None, "h1_tags": []}
soup = BeautifulSoup(html_content, 'html.parser')
# استخراج العنوان
title_tag = soup.find('title')
title = title_tag.get_text(strip=True) if title_tag else None
# استخراج الوصف التعريفي
meta_description_tag = soup.find('meta', attrs={'name': 'description'})
meta_description = meta_description_tag['content'].strip() if meta_description_tag and 'content' in meta_description_tag.attrs else None
# استخراج جميع عناوين H1
h1_tags = [h1.get_text(strip=True) for h1 in soup.find_all('h1')]
return {
"title": title,
"meta_description": meta_description,
"h1_tags": h1_tags
}
المهمة 3: الإبلاغ عن بيانات SEO (Report SEO Data)
المهمة الأخيرة هي عرض البيانات المستخرجة بطريقة واضحة ومقروءة. يمكن أن تكون هذه المهمة طباعة البيانات إلى الكونسول، حفظها في ملف CSV، أو إرسالها إلى قاعدة بيانات.
def report_seo_data(seo_data):
"""
يطبع بيانات SEO المستخرجة إلى الكونسول.
:param seo_data: قاموس يحتوي على بيانات SEO.
"""
print("\n--- تقرير تحليل SEO ---")
print(f"العنوان (Title): {seo_data['title']}")
print(f"الوصف التعريفي (Meta Description): {seo_data['meta_description']}")
print("عناوين H1:")
if seo_data['h1_tags']:
for i, h1 in enumerate(seo_data['h1_tags']):
print(f" {i+1}. {h1}")
else:
print(" لا توجد عناوين H1.")
print("-------------------------")
تجميع وتنفيذ المهام (Orchestrate Tasks)
الآن، سنقوم بتجميع هذه المهام معًا في وظيفة رئيسية واحدة لتنفيذ سير العمل الكامل لتحليل SEO.
def main_seo_analyzer(url):
"""
المنسق الرئيسي لمهام تحليل SEO.
:param url: عنوان URL للصفحة المراد تحليلها.
"""
print(f"بدء تحليل SEO لـ: {url}")
# المهمة 1: جلب المحتوى
html_content = fetch_page_content(url)
if not html_content:
print("فشل في جلب محتوى الصفحة. إنهاء التحليل.")
return
# المهمة 2: تحليل بيانات SEO
seo_data = extract_seo_data(html_content)
# المهمة 3: الإبلاغ عن البيانات
report_seo_data(seo_data)
print(f"اكتمل تحليل SEO لـ: {url}")
# مثال على الاستخدام:
if __name__ == "__main__":
target_url = "https://www.example.com" # قم بتغيير هذا الرابط لموقعك
main_seo_analyzer(target_url)
الكود الكامل
للتشغيل، تأكد من تثبيت المكتبات المطلوبة: pip install requests beautifulsoup4.
import requests
from bs4 import BeautifulSoup
def fetch_page_content(url):
"""
يجلب محتوى HTML لعنوان URL محدد.
:param url: عنوان URL للصفحة.
:return: محتوى HTML للصفحة كسلسلة نصية، أو None إذا حدث خطأ.
"""
try:
response = requests.get(url, timeout=10)
response.raise_for_status() # يرفع استثناء لأكواد الحالة الخاطئة (4xx أو 5xx)
return response.text
except requests.exceptions.RequestException as e:
print(f"خطأ في جلب المحتوى من {url}: {e}")
return None
def extract_seo_data(html_content):
"""
يستخرج بيانات SEO الأساسية (العنوان، الوصف، H1s) من محتوى HTML.
:param html_content: محتوى HTML للصفحة.
:return: قاموس يحتوي على بيانات SEO.
"""
if not html_content:
return {"title": None, "meta_description": None, "h1_tags": []}
soup = BeautifulSoup(html_content, 'html.parser')
# استخراج العنوان
title_tag = soup.find('title')
title = title_tag.get_text(strip=True) if title_tag else None
# استخراج الوصف التعريفي
meta_description_tag = soup.find('meta', attrs={'name': 'description'})
meta_description = meta_description_tag['content'].strip() if meta_description_tag and 'content' in meta_description_tag.attrs else None
# استخراج جميع عناوين H1
h1_tags = [h1.get_text(strip=True) for h1 in soup.find_all('h1')]
return {
"title": title,
"meta_description": meta_description,
"h1_tags": h1_tags
}
def report_seo_data(seo_data):
"""
يطبع بيانات SEO المستخرجة إلى الكونسول.
:param seo_data: قاموس يحتوي على بيانات SEO.
"""
print("\n--- تقرير تحليل SEO ---")
print(f"العنوان (Title): {seo_data['title']}")
print(f"الوصف التعريفي (Meta Description): {seo_data['meta_description']}")
print("عناوين H1:")
if seo_data['h1_tags']:
for i, h1 in enumerate(seo_data['h1_tags']):
print(f" {i+1}. {h1}")
else:
print(" لا توجد عناوين H1.")
print("-------------------------")
def main_seo_analyzer(url):
"""
المنسق الرئيسي لمهام تحليل SEO.
:param url: عنوان URL للصفحة المراد تحليلها.
"""
print(f"بدء تحليل SEO لـ: {url}")
# المهمة 1: جلب المحتوى
html_content = fetch_page_content(url)
if not html_content:
print("فشل في جلب محتوى الصفحة. إنهاء التحليل.")
return
# المهمة 2: تحليل بيانات SEO
seo_data = extract_seo_data(html_content)
# المهمة 3: الإبلاغ عن البيانات
report_seo_data(seo_data)
print(f"اكتمل تحليل SEO لـ: {url}")
# مثال على الاستخدام:
if __name__ == "__main__":
target_url = "https://www.example.com" # قم بتغيير هذا الرابط لموقعك
main_seo_analyzer(target_url)
النتيجة النهائية المتوقعة
بعد تشغيل الكود، ستظهر لك في نافذة الكونسول (Terminal) رسائل توضح بدء عملية التحليل لعنوان URL المحدد. في حال نجاح جلب وتحليل الصفحة، ستتم طباعة تقرير مفصل يتضمن:
- عنوان الصفحة (Title).
- الوصف التعريفي (Meta Description).
- قائمة بجميع عناوين H1 الموجودة في الصفحة.
إذا حدث خطأ أثناء جلب الصفحة (مثل عدم توفر الصفحة أو مشكلة في الاتصال بالإنترنت)، فستظهر رسالة خطأ توضح المشكلة.