karanlık proxyscrape logo

Python Kullanarak E-posta Adreslerini Kazıma - Nihai Kılavuz 2024

Python, Kazıma, Aralık-02-20225 dakika okuma
E-posta potansiyel müşterilerinin bir listesine sahip olmak, pazarlamacıların işlerini büyütmelerine yardımcı olabilir. İş insanları, Python komut dosyalarını kullanarak e-posta adreslerini kazıyarak hedef kitlelerine daha iyi ulaşabilirler. 
MailButler.io, dünya genelinde yaklaşık 4,3 milyar e-posta kullanıcısı olduğunu ve bu rakamın 2025 yılına kadar 4,6 milyara ulaşacağının tahmin edildiğini söylüyor. Bu istatistikler, insanların resmi iletişim biçimleri için çoğunlukla e-posta platformuna güvendiklerini söylüyor. Bu makale, python dilini kullanarak e-posta adreslerini kazıma işlemi boyunca size rehberlik edecektir. 

İçindekiler

Python Kullanarak E-posta Adreslerini Kazıma

İyi bir müşteri kitlesine sahip olmanın en kolay yollarından biri, mümkün olduğunca çok sayıda iş e-posta adresine sahip olmak ve onlara hizmet detaylarınızı tekrar tekrar göndermektir. İnternette bu hizmetleri ücretsiz olarak sağlayan birçok kazıma aracı vardır, ancak bunların veri çekme limitleri vardır. Ayrıca sınırsız veri çekme limiti sunarlar, ancak ücretlidirler. Kendi ellerinizle bir tane oluşturabilecekken neden onlara ödeme yapasınız ki? Python kullanarak kaliteli bir kazıma aracı oluşturmanın adımlarını tartışalım. 

İlgili Makaleler

E-posta Adreslerini Kazımak İçin Adımlar

Yeni başlayanlar için çok basit bir örnek olsa da, özellikle web kazıma konusunda yeni olanlar için bir öğrenme deneyimi olacaktır. Bu, herhangi bir sınırlama olmaksızın e-posta adreslerini almanıza yardımcı olacak adım adım bir öğretici olacaktır. Akıllı web kazıyıcımızın yapım süreci ile başlayalım.

Adım 1: Modülleri İçe Aktarma

Projemiz için aşağıdaki altı modülü kullanacağız.

yeniden içe aktar 
i̇thalat talepleri̇
from urllib.parse import urlsplit
from collections import deque
from bs4 import BeautifulSoup
import pandas as pd
from google.colab import dosyalar

İthal edilen modüllerin detayları aşağıda verilmiştir:

  1. re düzenli ifade eşleştirmesi içindir.
  2. HTTP istekleri göndermek için istekler.
  3. URL'leri bileşen parçalarına bölmek için urlsplit.
  4. deque, her iki ucuna ekleme ve çıkarma yapmak için kullanılan liste biçiminde bir kaptır.
  5. Farklı web sayfalarının HTML dosyalarından veri çekmek için BeautifulSoup.
  6. DataFrame'e e-posta biçimlendirmesi ve diğer işlemler için pandas.

Adım 2: Değişkenlerin Başlatılması

Bu adımda, kazınmış URL'leri, kazınmamış URL'leri ve web sitelerinden başarıyla kazınmış bir dizi kaydedilmiş e-postayı kaydedecek bir deque başlatacağız.

# url'yi girdiden oku
original_url = input("Web sitesi URL'sini girin: ") 
 
# kazınacak URL'leri kaydetmek için
unscraped = deque([original_url])
 
# kazınmış URL'leri kaydetmek için
kazınmış = set()
 
# getirilen e-postaları kaydetmek için
emails = set()  

Bir kümede yinelenen öğelere izin verilmez, bu nedenle hepsi benzersizdir.

Adım 3: Kazıma İşlemine Başlama

  1. İlk adım, kazınmış ve kazınmamış URL'ler arasında ayrım yapmaktır. Bunu yapmanın yolu, bir URL'yi kazınmamıştan kazınmışa taşımaktır.
while len(unscraped):
    # move unsraped_url to scraped_urls set
    url = unscraped.popleft() # popleft(): Deque ' nin sol tarafından bir öğeyi kaldırın ve döndürün
    scraped.add(url)
  1. Bir sonraki adım, URL'nin farklı bölümlerinden veri çıkarmaktır. Bu amaçla urlsplit kullanacağız.
parts = urlsplit(url)

urlsplit() 5-tuple döndürür: (adresleme şeması, ağ konumu, yol, sorgu, parça, tanımlayıcı).

Gizli nedenlerden dolayı urlsplit() için örnek giriş ve çıkışları gösteremiyorum, ancak bir kez denediğinizde, kod sizden bir değer (web sitesi adresi) girmenizi isteyecektir. Çıktı SplitResult()'ı gösterecek ve SplitResult()'ın içinde beş özellik olacaktır.

Bu, web sitesi URL'si için taban ve yol kısmını almamızı sağlayacaktır.

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
  1. Bu, web sitesine HTTP GET isteği gönderme zamanıdır.
try:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # hata içeren sayfaları yoksay ve sonraki url ile devam et
       devam et
  1. E-posta adreslerini ayıklamak için normal ifadeyi kullanacağız ve ardından bunları e-posta kümesine ekleyeceğiz.
# Düzenli ifadeyi ihtiyacınıza göre düzenleyebilirsiniz
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  yanıt.metin, re.I)) # re.I: (durumu göz ardı et)
    emails.update(new_emails)
Düzenli ifadeler, kendi seçtiğiniz bilgileri çıkarmak istediğinizde çok yardımcı olur. Eğer bu konuda rahat değilseniz, daha fazla ayrıntı için Python RegEx 'e göz atabilirsiniz.
  1. Bir sonraki adım, web sitesine bağlı tüm URL'leri bulmaktır.
# html belgesi için güzel bir çorba oluşturun
   soup = BeautifulSoup(response.text, 'lxml')

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

for anchor in soup.find_all("a"): 
        
       # bağlantılı url'yi anchor'dan çıkar
        if "href" in anchor.attrs:
          link = anchor.attrs["href"]
        else:
          link = ''
        
       # göreli bağlantıları çözümleyin (/ ile başlayan)
        if link.startswith('/'):
            link = base_url + link
            
        elif not link.startswith('http'):
            link = path + link

Ardından yeni URL'leri bulacağız ve kazınmış veya kazınmamış kuyruğunda değillerse bunları kazınmamış kuyruğuna ekleyeceğiz.

Kodu kendi başınıza denediğinizde, tüm bağlantıların kazınamadığını fark edeceksiniz, bu yüzden onları da hariç tutmamız gerekiyor,

if not link.endswith(".gz" ):
         if not link in unscraped and not link in scraped:
              unscraped.append(link)

Adım 4: E-postaları CSV dosyasına aktarma

Sonuçları daha iyi bir şekilde analiz etmek için e-postaları CSV dosyasına aktaracağız.

df = pd.DataFrame(emails, columns=["Email"]) # tercih ettiğiniz sütun adıyla değiştirin
df.to_csv('email.csv', index=False)

Google Colab kullanıyorsanız, dosyayı yerel makinenize şu şekilde indirebilirsiniz

from google.colab import dosyalar
files.download("email.csv")

Daha önce de açıkladığım gibi, gizlilik sorunları nedeniyle hurdaya çıkarılan e-posta adreslerini gösteremiyorum. 

[Yasal Uyarı! Bazı web siteleri web kazıma yapmaya izin vermez ve IP'nizi kalıcı olarak engelleyebilecek çok akıllı botlara sahiptir, bu nedenle riski kendiniz alın].

Eksiksiz Kod

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

E-posta Adreslerinin Kazınmasında Proxyler

İşletmeler kişi listelerini oluşturmak için çok sayıda e-posta adresine ihtiyaç duyduklarından, birden fazla kaynaktan veri toplamak gerekir. Manuel veri toplama süreci sıkıcı ve zaman alıcı olabilir. Bu durumda, kazıyıcılar genellikle süreci hızlandırmak ve önlerine çıkan kısıtlamaları atlamak için proxy'leri tercih ederler. Proxyscrape , sınırsız veri kazıyabilen ve kesintisiz işlevsellik sağlamak için 7/24 çalışan yüksek bant genişliğine sahip proxy'ler sağlar. Proxy anonimlik seviyeleri, kazıyıcıların kimliğini gizleyecek kadar yüksektir. 

Sıkça Sorulan Sorular

1. E-posta adreslerini kazımak neden gereklidir?

Nitelikli e-posta adreslerinden oluşan bir potansiyel iletişim listesi oluşturmak, hedef kitleye ulaşma sürecini kolaylaştıracaktır. Çoğu insan iletişim aracı olarak e-postayı kullandığından, e-posta adresleri aracılığıyla onlara ulaşmak oldukça kolaydır. 

2. E-posta adreslerini kazımak için proxy'lere ihtiyacımız var mı?

E-posta adreslerini birden fazla kaynaktan kazırken, kazıyıcılar IP blokları veya coğrafi engeller gibi bazı zorluklarla karşılaşabilir. Bu durumda, proxy'ler kullanıcıların adreslerini proxy adresi ile gizleyecek ve engellenen web sitelerine erişimdeki engelleri kaldıracaktır. 

3. E-posta adreslerini kazımak yasal mı? 

Kamuya açık verileri toplamak her zaman yasaldır. Bu nedenle, kazıyıcılar topladıkları verilerin kamu malı olduğundan emin olmalıdır. Değilse, kazıma işleminde yasallığı korumak için önceden izin alarak veri toplayabilirler. 

Toparlıyoruz

Bu makalede, e-posta adreslerini kazımanın pratik bir örneğini göstererek web kazımanın bir harikasını daha keşfettik. Web tarayıcımızı Python kullanarak yaparak en akıllı yaklaşımı denedik ve BeautfulSoup adlı en kolay ve yine de en güçlü kütüphane. Web Kazıma, gereksinimleriniz göz önünde bulundurularak doğru şekilde yapılırsa çok yardımcı olabilir. E-posta adreslerini kazımak için çok basit bir kod yazmış olsak da, tamamen ücretsizdir ve bunun için başka hizmetlere güvenmenize gerek yoktur. Kodu mümkün olduğunca basitleştirmek için elimden gelenin en iyisini yapmaya çalıştım ve ayrıca kendi gereksinimlerinize göre optimize etmeniz için özelleştirme için yer ekledim. 

Kazıma projeleriniz sırasında kullanmak için proxy hizmetleri arıyorsanız, ProxyScrape konut ve premium proxy'lere bakmayı unutmayın.