ماذا سنبني اليوم؟
سنتعلم كيف نستخدم بايثون لأتمتة عملية البحث عن فرص الروابط الخلفية (Backlinks) في نيتش معين. سنقوم بإنشاء سكربت يقوم بـ:
- تحديد كلمات مفتاحية لنيتش معين.
- البحث عن صفحات محتملة تحتوي على فرص للروابط الخلفية.
- تحليل محتوى هذه الصفحات للتعرف على نوع الفرصة (مثل: كتابة ضيف، صفحة مصادر، روابط مكسورة).
- تجميع البيانات في ملف CSV قابل للاستخدام.
المتطلبات الأساسية
- Python 3 مثبت على جهازك.
- مكتبات Python:
requestsوBeautifulSoup4.
للتثبيت: افتح موجه الأوامر (CMD أو Terminal) واكتب:
pip install requests beautifulsoup4
الخطوة 1: تحديد كلمات مفتاحية للنيتش
أولاً، نحتاج إلى قائمة بكلمات مفتاحية تتعلق بالنيتش الذي نستهدفه. هذه الكلمات ستساعدنا في العثور على المواقع ذات الصلة.
# مثال: نيتش "تطوير الويب"
niche_keywords = ["web development", "python programming", "frontend development", "backend development"]
opportunity_queries = [
"write for us",
"guest post",
"submit article",
"contribute",
"resources",
"link to us",
]
الخطوة 2: البحث عن صفحات محتملة (محاكاة)
في سيناريو حقيقي، يمكنك استخدام APIs لمحركات البحث أو أدوات متخصصة للعثور على URLs. لتسهيل الشرح، سنستخدم قائمة محددة مسبقًا من الروابط كمثال، مع الإشارة إلى كيفية توليدها.
ملاحظة هامة: الكشط المباشر لنتائج بحث Google قد يؤدي إلى حظر عنوان IP الخاص بك. في التطبيقات العملية، يُفضل استخدام APIs رسمية مثل Google Custom Search API أو أدوات SEO متخصصة توفر هذه البيانات. هنا، سنفترض أننا حصلنا على قائمة من الروابط المحتملة.
لنفترض أننا حصلنا على هذه الروابط من خلال البحث بـ "web development" + "guest post" وهكذا:
potential_urls = [
"https://example.com/guest-post-guidelines",
"https://anotherdevblog.com/write-for-us",
"https://techresources.net/helpful-links",
"https://programmingsite.org/submit-your-article",
"https://oldblog.com/broken-links-page", # For broken link building example
]
الخطوة 3: تحليل محتوى الصفحات
الآن، سنقوم بزيارة كل URL وتحليل محتواها للبحث عن مؤشرات لفرص الروابط الخلفية. سنبحث عن عبارات مثل "write for us"، "guest post"، "resources"، وما إلى ذلك.
import requests
from bs4 import BeautifulSoup
import csv
import re
def find_backlink_opportunities(urls, niche_keywords, opportunity_queries):
results = []
# Compile regex patterns for efficiency
opportunity_patterns = [re.compile(query, re.IGNORECASE) for query in opportunity_queries]
niche_patterns = [re.compile(keyword, re.IGNORECASE) for keyword in niche_keywords]
for url in urls:
print(f"Analyzing: {url}")
try:
response = requests.get(url, timeout=10)
response.raise_for_status() # Raise an exception for HTTP errors
soup = BeautifulSoup(response.text, 'html.parser')
page_text = soup.get_text()
opportunity_type = "No specific opportunity found"
contact_email = ""
# Check for specific opportunity phrases
for query in opportunity_queries:
if re.search(query, page_text, re.IGNORECASE):
opportunity_type = f"Potential {query.replace('"', '').strip()} opportunity"
break
# More refined checks
if "guest post" in page_text.lower() or "write for us" in page_text.lower():
opportunity_type = "Guest Post/Write for Us"
elif "resources" in page_text.lower() or "helpful links" in page_text.lower():
opportunity_type = "Resource Page Link"
elif "broken link" in page_text.lower() or "dead link" in page_text.lower():
# This is a basic check. For real broken link building, you'd need to check external links for 404s.
opportunity_type = "Potential Broken Link Opportunity (Manual check needed)"
# Extract emails
emails = re.findall(r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}", page_text)
if emails:
contact_email = ", ".join(set(emails)) # Use set to get unique emails
# Check if niche keywords are present (relevance check)
is_relevant = any(pattern.search(page_text) for pattern in niche_patterns)
results.append({
"URL": url,
"Opportunity Type": opportunity_type,
"Contact Email": contact_email,
"Is Niche Relevant": "Yes" if is_relevant else "No"
})
except requests.exceptions.RequestException as e:
print(f"Error accessing {url}: {e}")
results.append({
"URL": url,
"Opportunity Type": f"Error: {e}",
"Contact Email": "",
"Is Niche Relevant": "N/A"
})
return results
# --- Main execution ---
niche_keywords = ["web development", "python programming", "frontend development", "backend development", "SEO", "digital marketing"]
opportunity_queries = [
"write for us",
"guest post",
"submit article",
"contribute",
"resources",
"link to us",
"add your link",
"partnerships"
]
# In a real scenario, this list would come from a SERP API or manual research
potential_urls = [
"https://www.freecodecamp.org/news/how-to-write-for-freecodecamp/",
"https://www.smashingmagazine.com/write-for-us/",
"https://dev.to/settings/new-post", # Not a direct "write for us" but a platform for content
"https://www.hongkiat.com/blog/resources/",
"https://moz.com/community/contribute",
"https://www.searchenginejournal.com/contribute/",
"https://www.example-non-existent.com/page", # Example of a broken URL
"https://www.w3.org/TR/html5/", # A relevant but not opportunity page
]
opportunities = find_backlink_opportunities(potential_urls, niche_keywords, opportunity_queries)
# Save results to CSV
csv_file_path = "backlink_opportunities.csv"
if opportunities:
keys = opportunities[0].keys()
with open(csv_file_path, 'w', newline='', encoding='utf-8') as output_file:
dict_writer = csv.DictWriter(output_file, fieldnames=keys)
dict_writer.writeheader()
dict_writer.writerows(opportunities)
print(f"\nResults saved to {csv_file_path}")
else:
print("No opportunities found or processed.")
النتيجة النهائية المتوقعة
بعد تشغيل السكربت، سيتم إنشاء ملف backlink_opportunities.csv في نفس المجلد الذي يوجد به ملف البايثون الخاص بك. سيحتوي هذا الملف على جدول منظم يتضمن:
- URL: رابط الصفحة التي تم تحليلها.
- Opportunity Type: نوع الفرصة المحتملة (مثل "Guest Post/Write for Us", "Resource Page Link", "No specific opportunity found").
- Contact Email: أي عناوين بريد إلكتروني تم العثور عليها في الصفحة.
- Is Niche Relevant: ما إذا كانت الصفحة تحتوي على كلمات مفتاحية من النيتش المستهدف، مما يشير إلى مدى ملاءمتها.
هذا الملف سيكون نقطة انطلاق ممتازة لحملات بناء الروابط الخلفية الخاصة بك، حيث يوفر لك قائمة منظمة بالمواقع المحتملة التي يمكنك التواصل معها.