ciemne logo proxyscrape

Skrobanie adresów e-mail za pomocą Pythona - przewodnik 2024

Python, Scraping, Dec-02-20225 minut czytania
Posiadanie listy potencjalnych adresów e-mail może pomóc marketerom w rozwoju ich działalności. Skrobiąc adresy e-mail za pomocą skryptów Python, ludzie biznesu mogą lepiej docierać do swoich odbiorców. 
MailButler.io podaje, że na całym świecie jest prawie 4,3 miliarda użytkowników poczty elektronicznej, a szacuje się, że do 2025 roku liczba ta osiągnie 4,6 miliarda. Statystyki te mówią, że ludzie najczęściej polegają na platformie e-mail jako oficjalnym sposobie komunikacji. Ten artykuł poprowadzi Cię przez proces skrobania adresów e-mail przy użyciu języka Python. 

Spis treści

Skrobanie adresów e-mail przy użyciu Pythona

Jednym z najłatwiejszych sposobów na pozyskanie klientów jest posiadanie jak największej liczby biznesowych adresów e-mail i wysyłanie im szczegółów swoich usług raz za razem. W Internecie dostępnych jest wiele narzędzi do skrobania, które świadczą te usługi za darmo, ale mają limity danych do wypłaty. Oferują również nieograniczone limity ekstrakcji danych, ale są płatne. Po co im płacić, skoro można je zbudować własnymi rękami? Omówmy kroki, aby zbudować wysokiej jakości narzędzie do skrobania przy użyciu Pythona. 

Powiązane artykuły

Kroki do skrobania adresów e-mail

Chociaż będzie to bardzo prosty przykład dla początkujących, będzie to doświadczenie edukacyjne, szczególnie dla tych, którzy są nowicjuszami w skrobaniu stron internetowych. Będzie to samouczek krok po kroku, który pomoże ci uzyskać adresy e-mail bez żadnych ograniczeń. Zacznijmy od procesu budowy naszego inteligentnego web scrapera.

Krok 1: Importowanie modułów

W naszym projekcie wykorzystamy sześć następujących modułów.

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

Szczegóły importowanych modułów podano poniżej:

  1. re służy do dopasowywania wyrażeń regularnych.
  2. do wysyłania żądań HTTP.
  3. urlsplit do dzielenia adresów URL na części składowe.
  4. deque to kontener, który ma postać listy używanej do dołączania i wyskakiwania na obu końcach.
  5. BeautifulSoup do pobierania danych z plików HTML różnych stron internetowych.
  6. pandas do formatowania wiadomości e-mail do DataFrame i do dalszych operacji.

Krok 2: Inicjalizacja zmiennych

W tym kroku zainicjujemy deque, który zapisze zeskrobane adresy URL, nieskrobane adresy URL i zestaw zapisanych wiadomości e-mail pomyślnie zeskrobanych ze stron internetowych.

# odczytuje adres url z danych wejściowych
original_url = input("Wprowadź adres URL strony: ") 
 
# aby zapisać adresy URL do zeskrobania
unscraped = deque([original_url])
 
# aby zapisać zeskrobane adresy URL
scraped = set()
 
# aby zapisać pobrane wiadomości e-mail
emails = set()  

Zduplikowane elementy nie są dozwolone w zestawie, więc wszystkie są unikalne.

Krok 3: Rozpoczęcie procesu skrobania

  1. Pierwszym krokiem jest rozróżnienie między adresami URL scraped i unscraped. Sposobem na to jest przeniesienie adresu URL z kategorii unscraped do scraped.
while len(unscraped):
    # przenieś unscraped_url do scraped_urls set
    url = unscraped.popleft() # popleft(): Usuń i zwróć element z lewej strony deque
    scraped.add(url)
  1. Następnym krokiem jest wyodrębnienie danych z różnych części adresu URL. W tym celu wykorzystamy urlsplit.
parts = urlsplit(url)

urlsplit() zwraca 5-krotność: (schemat adresowania, lokalizacja sieciowa, ścieżka, zapytanie, fragment, identyfikator).

Nie mogę pokazać przykładowych danych wejściowych i wyjściowych dla funkcji urlsplit() ze względów poufności, ale gdy spróbujesz, kod poprosi Cię o wprowadzenie pewnej wartości (adresu strony internetowej). Wyjście wyświetli SplitResult(), a wewnątrz SplitResult() będzie pięć atrybutów.

Pozwoli nam to uzyskać część bazową i ścieżkę dla adresu URL witryny.

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
  1. Jest to czas na wysłanie żądania HTTP GET do strony internetowej.
try:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # zignoruj strony z błędami i kontynuuj z następnym adresem url
       continue
  1. Do wyodrębnienia adresów e-mail użyjemy wyrażenia regularnego, a następnie dodamy je do zestawu e-mail.
# Możesz edytować wyrażenie regularne zgodnie z wymaganiami
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  response.text, re.I)) # re.I: (zignoruj wielkość liter)
    emails.update(new_emails)
Wyrażenia regularne są niezwykle pomocne, gdy chcesz wyodrębnić wybrane przez siebie informacje. Jeśli nie czujesz się z nimi komfortowo, możesz rzucić okiem na Python RegEx, aby uzyskać więcej szczegółów.
  1. Następnym krokiem jest znalezienie wszystkich adresów URL powiązanych z witryną.
# utworzenie pięknej zupy dla dokumentu html
   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"): 
        
       # wyodrębnij połączony adres URL z kotwicy
        if "href" in anchor.attrs:
          link = anchor.attrs["href"]
        else:
          link = ''
        
       # rozwiązywanie linków względnych (zaczynających się od /)
        if link.startswith('/'):
            link = base_url + link
            
        elif not link.startswith('http'):
            link = path + link

Następnie znajdziemy nowe adresy URL i dodamy je do kolejki unscraped, jeśli nie ma ich ani w scraped, ani w unscraped.

Po samodzielnym wypróbowaniu kodu zauważysz, że nie wszystkie linki są w stanie zostać zeskrobane, więc musimy je również wykluczyć,

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

Krok 4: Eksportowanie wiadomości e-mail do pliku CSV

Aby lepiej przeanalizować wyniki, wyeksportujemy wiadomości e-mail do pliku CSV.

df = pd.DataFrame(emails, columns=["Email"]) # zastąp preferowaną nazwą kolumny 
df.to_csv('email.csv', index=False)

Jeśli korzystasz z Google Colab, możesz pobrać plik na swój komputer lokalny przez

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

Jak już wyjaśniono, nie mogę pokazać usuniętych adresów e-mail ze względu na kwestie poufności. 

[Zastrzeżenie! Niektóre strony internetowe nie zezwalają na skrobanie stron internetowych i mają bardzo inteligentne boty, które mogą trwale zablokować twoje IP, więc skrobaj na własne ryzyko].

Kompletny 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

Proxy w skrobaniu adresów e-mail

Ponieważ firmy potrzebują wielu adresów e-mail do budowania swojej listy kontaktów, konieczne jest zbieranie danych z wielu źródeł. Ręczny proces gromadzenia danych może być żmudny i czasochłonny. W takim przypadku scraperzy zazwyczaj wybierają serwery proxy, aby przyspieszyć proces i ominąć ograniczenia, które pojawiają się na ich drodze. Proxyscrape zapewnia serwery proxy o wysokiej przepustowości, które są w stanie skrobać nieograniczoną ilość danych i działają 24 godziny na dobę, 7 dni w tygodniu, aby zapewnić nieprzerwaną funkcjonalność. Ich poziom anonimowości proxy jest wystarczająco wysoki, aby ukryć tożsamość skrobaków. 

Często zadawane pytania

1. Dlaczego konieczne jest skrobanie adresów e-mail?

Stworzenie potencjalnej listy kontaktów z kwalifikowanymi adresami e-mail ułatwi proces docierania do grupy docelowej. Ponieważ większość ludzi używa poczty elektronicznej jako środka komunikacji, łatwiej jest do nich dotrzeć za pośrednictwem adresów e-mail. 

2. Czy potrzebujemy serwerów proxy do skrobania adresów e-mail?

Podczas skrobania adresów e-mail z wielu źródeł, skrobaki mogą napotkać pewne wyzwania, takie jak blokady IP lub bariery geograficzne. W takim przypadku serwery proxy ukrywają adresy użytkowników za pomocą adresu proxy i usuwają blokady dostępu do zablokowanych stron internetowych. 

3. Czy skrobanie adresów e-mail jest legalne? 

Gromadzenie publicznie dostępnych danych jest zawsze legalne. Scraperzy muszą więc upewnić się, że zbierane przez nich dane są dostępne w domenie publicznej. Jeśli nie, mogą zbierać dane za uprzednią zgodą, aby zachować legalność scrapingu. 

Podsumowanie

W tym artykule zbadaliśmy jeszcze jeden cud skrobania stron internetowych, pokazując praktyczny przykład skrobania adresów e-mail. Wypróbowaliśmy najbardziej inteligentne podejście, tworząc nasz web crawler przy użyciu Pythona i jest to najprostsza, a jednocześnie najpotężniejsza biblioteka o nazwie BeautfulSoup. Web Scraping może być niezwykle pomocny, jeśli zostanie wykonany prawidłowo, biorąc pod uwagę wymagania użytkownika. Chociaż napisaliśmy bardzo prosty kod do skrobania adresów e-mail, jest on całkowicie darmowy, a także nie musisz polegać na innych usługach. Dołożyłem wszelkich starań, aby maksymalnie uprościć kod, a także dodałem miejsce na dostosowanie go do własnych potrzeb. 

Jeśli szukasz usług proxy do wykorzystania podczas swoich projektów scrapingowych, nie zapomnij spojrzeć na ProxyScrape residential i premium proxy