شعار proxyscrape داكن

كشط عناوين البريد الإلكتروني باستخدام بايثون - الدليل النهائي 2024

بايثون, كشط, Dec-13-20225 دقائق للقراءة

يمكن أن يساعد امتلاك قائمة من العملاء المحتملين عبر البريد الإلكتروني المسوقين على توسيع نطاق أعمالهم. من خلال كشط عناوين البريد الإلكتروني باستخدام نصوص Python، يمكن لرجال الأعمال التواصل بشكل أفضل مع جمهورهم. يقول موقع MailButler.io أن هناك ما يقرب من 4.3 مليار مستخدم للبريد الإلكتروني على مستوى العالم ومن المتوقع أن يصل هذا العدد إلى 4.6 مليار مستخدم بحلول عام 2025. تقول هذه الإحصائيات أن الناس

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

يقول موقع MailButler.io أن هناك ما يقرب من 4.3 مليار مستخدم للبريد الإلكتروني على مستوى العالم ومن المتوقع أن يصل هذا العدد إلى 4.6 مليار مستخدم بحلول عام 2025. تشير هذه الإحصائيات إلى أن الناس يعتمدون في الغالب على منصة البريد الإلكتروني في طريقة تواصلهم الرسمية. سترشدك هذه المقالة إلى عملية كشط عناوين البريد الإلكتروني باستخدام لغة بايثون. 

جدول المحتويات

كشط عناوين البريد الإلكتروني باستخدام بايثون

واحدة من أسهل الطرق للحصول على عملاء جيدين هي الحصول على أكبر عدد ممكن من عناوين البريد الإلكتروني للنشاط التجاري وإرسال تفاصيل خدمتك لهم مراراً وتكراراً. هناك العديد من أدوات الكشط الموجودة على الإنترنت التي توفر هذه الخدمات مجاناً، ولكن لديها حدوداً لاستخراج البيانات. كما أنها توفر حدودًا غير محدودة لاستخراج البيانات، ولكنها مدفوعة. لماذا تدفع لهم بينما يمكنك بناء واحدة بيديك؟ دعنا نناقش خطوات بناء أداة كشط عالية الجودة باستخدام Python. 

مقالات ذات صلة

أفضل أدوات كشط الويب من بايثون 

كيفية إنشاء وكيل في بايثون

خطوات كشط عناوين البريد الإلكتروني

على الرغم من أنه سيكون مثالًا بسيطًا جدًا للمبتدئين، إلا أنه سيكون تجربة تعليمية، خاصةً لأولئك الجدد في مجال كشط الويب. سيكون هذا برنامجًا تعليميًا خطوة بخطوة سيساعدك في الحصول على عناوين البريد الإلكتروني دون أي حدود. لنبدأ بعملية بناء مكشطة الويب الذكية الخاصة بنا.

الخطوة 1: استيراد الوحدات النمطية

سنستخدم الوحدات الست التالية في مشروعنا.

إعادة الاستيراد 
استيراد الطلبات
من urllib.parse استيراد urlsplit
من المجموعات استيراد deque
من bs4 استيراد الحساء الجميل
استيراد بانداس ك pd
من google.colab استيراد الملفات

فيما يلي تفاصيل الوحدات المستوردة:

re لمطابقة التعبيرات العادية.طلبات لإرسال طلبات HTTP.urlsplit لتقسيم عناوين URL إلى أجزاء مكونة.deque عبارة عن حاوية على شكل قائمة تستخدم للإلحاق والفرقعة على كلا الطرفين.BeautifulSoup لسحب البيانات من ملفات HTML لصفحات الويب المختلفة.pandas لتنسيق البريد الإلكتروني في DataFrame ولعمليات أخرى.

الخطوة 2: تهيئة المتغيرات

في هذه الخطوة، سنقوم بتهيئة دوّارة لحفظ عناوين URL التي تم كشطها، وعناوين URL التي لم يتم كشطها، ومجموعة من رسائل البريد الإلكتروني المحفوظة التي تم كشطها بنجاح من المواقع الإلكترونية.

# قراءة عنوان url من الإدخال
original_url = إدخال ("أدخل عنوان url الخاص بالموقع الإلكتروني: ") 
 
# لحفظ عناوين url المراد كشطها
unscraped = deque([url_url الأصلي])
 
# لحفظ عناوين url التي تم كشطها
كشطت = مجموعة()
 
# لحفظ رسائل البريد الإلكتروني المجلوبة
رسائل البريد الإلكتروني = مجموعة()  

العناصر المكررة غير مسموح بها في المجموعة، لذا فهي كلها فريدة من نوعها.

الخطوة 3: بدء عملية الكشط

تتمثل الخطوة الأولى في التمييز بين عناوين URL التي تم كشطها وغير المكشوطة. والطريقة للقيام بذلك هي نقل عنوان URL من غير مكشوط إلى مكشوط.

بينما len len(unscraped):
    # انقل عنوان URL غير المكشوف إلى مجموعةعناوين URL المكشوفة
    url = unscraped.popleft() # popleft(): إزالة عنصر وإرجاع عنصر من الجانب الأيسر من deque
    كشط.إضافة(url)

الخطوة التالية هي استخراج البيانات من أجزاء مختلفة من عنوان URL. لهذا الغرض، سنستخدم urlsplit.

الأجزاء = urlsplit(url)

يُرجِع urlsplit() 5 مكوِّنات: (مخطط العنونة، وموقع الشبكة، والمسار، والاستعلام، والجزء، والمعرِّف).

لا يمكنني عرض عينة من المدخلات والمخرجات لـ urlsplit() لأسباب تتعلق بالسرية، ولكن بمجرد المحاولة، سيطلب منك الرمز إدخال قيمة ما (عنوان الموقع الإلكتروني). سيعرض الإخراج SplitResult()، وداخل SplitResult() سيكون هناك خمس سمات.

سيسمح لنا ذلك بالحصول على الجزء الأساسي وجزء المسار لعنوان URL للموقع الإلكتروني.

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url

هذا هو الوقت المناسب لإرسال طلب HTTP GET إلى موقع الويب.

حاول:
        الاستجابة = طلبات.get(url)
    إلا (requests.exceptions.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # تجاهل الصفحات التي بها أخطاء وتابع مع عنوان url التالي 
       متابعة

لاستخراج عناوين البريد الإلكتروني سنستخدم التعبير العادي ثم نضيفها إلى مجموعة البريد الإلكتروني.

# يمكنك تعديل التعبير العادي وفقًا لمتطلباتك
    new_emails = s et(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                 response.text, re.I)) # re.I: (تجاهل الحالة)
    رسائل البريد الإلكتروني.update(new_emails)

تكون التعبيرات العادية ذات فائدة كبيرة عندما تريد استخراج المعلومات التي تختارها. إذا لم تكن مرتاحًا لها، يمكنك إلقاء نظرة على Python RegEx لمزيد من التفاصيل.

الخطوة التالية هي العثور على جميع عناوين URL المرتبطة بالموقع الإلكتروني.

# قم بإنشاء حساء جميل لمستند html
   حساء = حساء جميل(response.text، 'lxml')

The <a href=””> tag indicates a hyperlink that can be used to find all the linked URLs in the document.

بالنسبة للمرساة في الحساء.find_all("a"): 
        
       # استخرج عنوان url المرتبط من المرساة
       في حالة وجود "href" في الرابط في الرابط:
          الرابط = الارتباط = الرابط["href"] في المرساة
        غير ذلك
          الرابط = ''
        
       # حل الروابط النسبية (تبدأ ب/)
        إذا كان link.startswith('/'):
            الرابط = base_url + الرابط
            
        el if not link.startswith('http'):
            الرابط = المسار + الرابط

ثم سنعثر على عناوين URL الجديدة ونضيفها إلى قائمة الانتظار التي لم يتم كشطها إذا لم تكن موجودة في قائمة الانتظار التي تم كشطها أو في قائمة الانتظار التي لم يتم كشطها.

عند تجربة الكود بنفسك، ستلاحظ أنه لا يمكن كشط جميع الروابط، لذلك نحتاج أيضًا إلى استبعادها,

إذا لم يكن الرابط endswith(".gz" ):
         إذا لم يكن الرابط في unscraped وليس الرابط في كشط:
              unscraped.append(link)

الخطوة 4: تصدير رسائل البريد الإلكتروني إلى ملف CSV

لتحليل النتائج بطريقة أفضل، سنقوم بتصدير رسائل البريد الإلكتروني إلى ملف CSV.

df = pd.DataFrame(رسائل البريد الإلكتروني، الأعمدة=["البريد الإلكتروني"]) # استبدلها باسم العمود الذي تفضله
df.to_csv('email.csv'، فهرس=خطأ)

إذا كنت تستخدم Google Colab، يمكنك تنزيل الملف على جهازك المحلي عن طريق

من google.colab google.colab استيراد ملفات
files.download("email.csv")

كما سبق شرحه، لا يمكنني إظهار عناوين البريد الإلكتروني التي تم إلغاؤها بسبب مشاكل تتعلق بالسرية. 

[تنويه! بعض مواقع الويب لا تسمح بالقيام بكشط الويب ولديها روبوتات ذكية للغاية يمكنها حظر عنوان IP الخاص بك بشكل دائم، لذا قم بالكشط على مسؤوليتك الخاصة].

الرمز الكامل

import re
import requests
from urllib.parse import urlsplit
from collections import deque
from bs4 import BeautifulSoup
import pandas as pd
from google.colab import files
 
# read url from input
original_url = input("Enter the website url: ") 
 
# to save urls to be scraped
unscraped = deque([original_url])
 
# to save scraped urls
scraped = set()
 
# to save fetched emails
emails = set()  
 
while len(unscraped):
    url = unscraped.popleft()  
    scraped.add(url)
 
    parts = urlsplit(url)
        
    base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
 
    print("Crawling URL %s" % url)
    try:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        continue
 
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", response.text, re.I))
    emails.update(new_emails) 
 
    soup = BeautifulSoup(response.text, 'lxml')
 
    for anchor in soup.find_all("a"):
      if "href" in anchor.attrs:
        link = anchor.attrs["href"]
      else:
        link = ''
 
        if link.startswith('/'):
            link = base_url + link
        
        elif not link.startswith('http'):
            link = path + link

البروكسيات في كشط عناوين البريد الإلكتروني

نظرًا لأن الشركات تحتاج إلى العديد من عناوين البريد الإلكتروني لإنشاء قائمة جهات الاتصال الخاصة بها، فمن الضروري جمع البيانات من مصادر متعددة. قد تكون عملية جمع البيانات يدويًا مملة وتستغرق وقتًا طويلاً. في هذه الحالة، عادةً ما يلجأ الكاشطون إلى البروكسيات لتسريع العملية وتجاوز القيود التي تعترض طريقهم. Proxyscrape يوفر بروكسيات ذات نطاق ترددي عالٍ قادرة على كشط بيانات غير محدودة وتعمل على مدار الساعة طوال أيام الأسبوع لضمان عدم انقطاع العمل. مستوى إخفاء هوية البروكسي الخاص بهم مرتفع بما يكفي لإخفاء هوية الكاشطين. 

الأسئلة المتداولة

1. لماذا من الضروري كشط عناوين البريد الإلكتروني؟

سيؤدي إنشاء قائمة جهات اتصال محتملة بعناوين بريد إلكتروني مؤهلة إلى تسهيل عملية الوصول إلى الجمهور المستهدف. نظرًا لأن معظم الأشخاص يستخدمون البريد الإلكتروني كوسيلة اتصال، فمن الأسهل تمامًا الوصول إليهم من خلال عناوين البريد الإلكتروني. 

2. هل نحتاج إلى وكلاء لكشط عناوين البريد الإلكتروني؟

أثناء كشط عناوين البريد الإلكتروني من مصادر متعددة، قد تواجه أدوات الكشط بعض التحديات مثل حجب عناوين IP أو الحواجز الجغرافية. في هذه الحالة، تقوم البروكسيات بإخفاء عناوين المستخدمين بعنوان الوكيل وإزالة العوائق في الوصول إلى المواقع المحجوبة. 

3. هل هو قانوني لكشط عناوين البريد الإلكتروني؟ 

من القانوني دائمًا جمع البيانات المتاحة للجمهور. لذا، يجب على القائمين على الكشط التأكد من أن البيانات التي يجمعونها متاحة في المجال العام. وإذا لم يكن الأمر كذلك، فيمكنهم جمع البيانات بإذن مسبق للحفاظ على قانونية الكشط. 

الخاتمة

في هذه المقالة، استكشفنا أعجوبة أخرى من عجائب كشط الويب من خلال عرض مثال عملي لكشط عناوين البريد الإلكتروني. لقد جربنا النهج الأكثر ذكاءً من خلال إنشاء أداة زاحف الويب الخاصة بنا باستخدام Python وهي أسهل وأقوى مكتبة تسمى BeautfulSoup. يمكن أن يكون كشط الويب مفيدًا للغاية إذا تم القيام به بشكل صحيح مع مراعاة متطلباتك. على الرغم من أننا كتبنا كودًا بسيطًا جدًا لكشط عناوين البريد الإلكتروني، إلا أنه مجاني تمامًا، كما أنك لست بحاجة إلى الاعتماد على خدمات أخرى لهذا الغرض. لقد بذلت قصارى جهدي لتبسيط الكود قدر الإمكان وأضفت أيضًا مساحة للتخصيص حتى تتمكن من تحسينه وفقًا لمتطلباتك الخاصة. 

إذا كنت تبحث عن خدمات البروكسي لاستخدامها أثناء مشاريع الكشط، فلا تنسى أن تنظر إلى ProxyScrape البروكسي السكني والوكلاء المتميزين