Cạo địa chỉ email bằng Python - Hướng dẫn cơ bản 2024

trăn, cạo, Dec-13-20225 phút đọc

Sở hữu một danh sách các khách hàng tiềm năng email có thể giúp các nhà tiếp thị mở rộng quy mô kinh doanh của họ. Bằng cách thu thập địa chỉ email bằng tập lệnh Python, những người kinh doanh có thể tiếp cận tốt hơn với khán giả của họ.  MailButler.io nói rằng có gần 4,3 tỷ người dùng email trên toàn cầu, ước tính sẽ đạt 4,6 tỷ vào năm 2025. Những thống kê này nói rằng mọi người

Sở hữu một danh sách các khách hàng tiềm năng email có thể giúp các nhà tiếp thị mở rộng quy mô kinh doanh của họ. Bằng cách thu thập địa chỉ email bằng tập lệnh Python, những người kinh doanh có thể tiếp cận tốt hơn với khán giả của họ. 

MailButler.io nói rằng có gần 4,3 tỷ người dùng email trên toàn cầu , ước tính sẽ đạt 4,6 tỷ vào năm 2025. Những thống kê này nói rằng mọi người chủ yếu dựa vào nền tảng email cho phương thức liên lạc chính thức của họ. Bài viết này sẽ hướng dẫn bạn quy trình scraping địa chỉ email bằng ngôn ngữ python. 

Mục lục

Quét địa chỉ email bằng Python

Một trong những cách dễ nhất để có khách hàng tốt là có càng nhiều địa chỉ email doanh nghiệp càng tốt và gửi cho họ chi tiết dịch vụ của bạn nhiều lần. Chúng có nhiều công cụ cạo có mặt trên internet cung cấp các dịch vụ này miễn phí, nhưng chúng có giới hạn dữ liệu rút tiền. Họ cũng cung cấp giới hạn trích xuất dữ liệu không giới hạn, nhưng họ được trả tiền. Tại sao phải trả tiền cho họ khi bạn có thể xây dựng một cái bằng tay của chính mình? Hãy để chúng tôi thảo luận về các bước để xây dựng một công cụ cạo chất lượng bằng Python. 

Những bài viết liên quan

Các công cụ cạo web Python tốt nhất 

Cách tạo proxy bằng Python

Các bước để cạo địa chỉ email

Mặc dù nó sẽ là một ví dụ rất đơn giản cho người mới bắt đầu, nhưng nó sẽ là một kinh nghiệm học tập, đặc biệt là đối với những người mới làm quen với việc quét web. Đây sẽ là một hướng dẫn từng bước sẽ giúp bạn có được địa chỉ email mà không có bất kỳ giới hạn nào. Hãy bắt đầu với quá trình xây dựng trình quét web thông minh của chúng tôi.

Bước 1: Nhập mô-đun

Chúng tôi sẽ sử dụng sáu mô-đun sau cho dự án của chúng tôi.

Nhập khẩu lại
Yêu cầu nhập khẩu 
từ urllib.parse nhập urlsplit
từ bộ sưu tập nhập khẩu deque
từ bs4 nhập khẩu BeautifulSoup
Nhập khẩu gấu trúc dưới dạng PD
Từ Google.colab Nhập tệp

Chi tiết về các mô-đun được nhập được đưa ra dưới đây:

re dành cho biểu thức chính quy matching.requests để gửi HTTP requests.urlsplit để chia URL thành các phần thành phần.deque là một container ở dạng danh sách được sử dụng để nối và bật lên ở hai đầu. BeautifulSoup để kéo dữ liệu từ các tệp HTML của các trang web khác nhau.pandas để định dạng email vào DataFrame và cho các hoạt động tiếp theo.

Bước 2: Khởi tạo biến

Trong bước này, chúng tôi sẽ khởi tạo một deque sẽ lưu các URL cóp nhặt được, URL chưa được cạo và một tập hợp các email lưu được thu thập thành công từ các trang web.

# đọc url từ đầu vàooriginal_url = input("Nhập url trang web: ") 
 
# để lưu URL cần cạochưa cạo = deque([original_url])
 
# để lưu các url đã cạo = set()
 
# để lưu email đã tìm nạpemail = set()  

Các phần tử trùng lặp không được phép trong một tập hợp, vì vậy tất cả chúng đều là duy nhất.

Bước 3: Bắt đầu quá trình cạo

Bước đầu tiên là phân biệt giữa các URL cóp nhặt và chưa được cạo. Cách để làm điều này là di chuyển một URL từ chưa cạo sang cóp nhặt được.

trong khi len (chưa cạo):
    # di chuyển unsraped_url đến bộ scraped_urls
    url = unscraped.popleft() # popleft(): Xóa  trả về một phần tử từ phía bên trái của deque
    Cạo. Thêm (URL)

Bước tiếp theo là trích xuất dữ liệu từ các phần khác nhau của URL. Với mục đích này, chúng tôi sẽ sử dụng urlsplit.

parts = urlsplit(url)

urlsplit() trả về 5-tuple: (lược đồ địa chỉ, vị trí mạng, đường dẫn, truy vấn, phân đoạn, mã định danh).

Tôi không thể hiển thị đầu vào và đầu ra mẫu cho urlsplit() vì lý do bí mật, nhưng một khi bạn thử, mã sẽ yêu cầu bạn nhập một số giá trị (địa chỉ trang web). Đầu ra sẽ hiển thị SplitResult(), và bên trong SplitResult() sẽ có năm thuộc tính.

Điều này sẽ cho phép chúng tôi lấy phần cơ sở và đường dẫn cho URL trang web.

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

Đây là lúc để gửi yêu cầu HTTP GET đến trang web.

cố gắng:
        response = yêu cầu. nhận (url)
    ngoại trừ (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # Bỏ qua các trang  lỗi  tiếp tục với URL tiếp theo 
        tiếp tục

Để giải nén các địa chỉ email, chúng tôi sẽ sử dụng experession thông thường và sau đó thêm chúng vào bộ email.

# Bạn có thể chỉnh sửa biểu thức chính quy theo yêu cầu của bạn
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  response.text, lại. I)) # lại. I: (bỏ qua trường hợp)
    email.update(new_emails)

Biểu thức chính quy giúp ích rất nhiều khi bạn muốn trích xuất thông tin mà bạn chọn. Nếu bạn không thoải mái với chúng, bạn có thể xem Python RegEx để biết thêm chi tiết.

Bước tiếp theo là tìm tất cả các URL được liên kết với trang web.

# tạo một món súp đẹp cho súp tài liệu html
    = BeautifulSoup (response.text, 'lxml')

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

Đối với neo trong soup.find_all ("a"): 
        
        # Trích xuất URL được liên kết từ neo
        Nếu "href" trong anchor.attrs:
          link = anchor.attrs["href"]
        khác:
          liên kết = ''
        
        # giải quyết các liên kết tương đối (bắt đầu bằng /)
        Nếu link.startswith('/'):
            liên kết = base_url + liên kết
            
elif không link.startswith('http'):
            liên kết = đường dẫn + liên kết

Sau đó, chúng tôi sẽ tìm các URL mới và thêm chúng vào hàng đợi chưa được cạo nếu chúng không nằm trong cạo cũng như chưa được cạo.

Khi bạn tự mình thử mã, bạn sẽ nhận thấy rằng không phải tất cả các liên kết đều có thể được cạo, vì vậy chúng tôi cũng cần loại trừ chúng,

nếu không phải link.endswith(".gz" ):
          Nếu không liên kết trong unscraped  không liên kết trong scraped:
              unscraped.append(liên kết)

Bước 4: Xuất email sang tệp CSV

Để phân tích kết quả một cách tốt hơn, chúng tôi sẽ xuất email sang tệp CSV.

DF = PD. DataFrame (email, cột = ["Email"]) # thay thế bằng tên cột bạn thích
df.to_csv('email.csv', index=False)

Nếu bạn đang sử dụng Google Colab, bạn có thể tải tệp xuống máy cục bộ của mình bằng cách

từ google.colab nhập tệp
files.download("email.csv")

Như đã giải thích, tôi không thể hiển thị các địa chỉ email bị loại bỏ do vấn đề bảo mật. 

[Tuyên bố từ chối trách nhiệm! Một số trang web không cho phép quét web và họ có các bot rất thông minh có thể chặn vĩnh viễn IP của bạn, vì vậy hãy tự chịu rủi ro.]

Hoàn thành mã

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 trong việc cạo địa chỉ email

Vì các doanh nghiệp yêu cầu nhiều địa chỉ email để xây dựng danh sách liên hệ của họ, nên cần phải thu thập dữ liệu từ nhiều nguồn. Quá trình thu thập dữ liệu thủ công có thể tẻ nhạt và tốn thời gian. Trong trường hợp này, các scraper thường sử dụng proxy để tăng tốc quá trình và bỏ qua các hạn chế theo cách của họ. Proxyscrape Cung cấp proxy băng thông cao có khả năng cạo dữ liệu không giới hạn và hoạt động 24/7 để đảm bảo chức năng không bị gián đoạn. Mức độ ẩn danh proxy của họ đủ cao để che giấu danh tính của những người cạp. 

Các câu hỏi thường gặp

1. Tại sao cần phải cạo địa chỉ email?

Tạo một danh sách liên hệ tiềm năng với các địa chỉ email đủ điều kiện sẽ giảm bớt quá trình tiếp cận với đối tượng mục tiêu. Vì hầu hết mọi người sử dụng email làm phương tiện giao tiếp của họ, việc tiếp cận họ thông qua địa chỉ email khá dễ dàng hơn. 

2. Chúng tôi có cần proxy để thu thập địa chỉ email không?

Trong khi thu thập địa chỉ email từ nhiều nguồn, scraper có thể phải đối mặt với một số thách thức như chặn IP hoặc rào cản địa lý. Trong trường hợp này, proxy sẽ ẩn địa chỉ của người dùng bằng địa chỉ proxy và loại bỏ các khối trong việc truy cập các trang web bị chặn. 

3. Việc thu thập địa chỉ email có hợp pháp không? 

Luôn luôn hợp pháp để thu thập dữ liệu có sẵn công khai. Vì vậy, scrapers phải đảm bảo dữ liệu họ đang thu thập có sẵn trong phạm vi công cộng. Nếu không, họ có thể thu thập dữ liệu với sự cho phép trước để duy trì tính hợp pháp trong việc cạo. 

Tổng kết

Trong bài viết này, chúng tôi đã khám phá thêm một kỳ quan của việc quét web bằng cách hiển thị một ví dụ thực tế về việc cạo địa chỉ email. Chúng tôi đã thử cách tiếp cận thông minh nhất bằng cách tạo trình thu thập dữ liệu web của chúng tôi bằng Python và đó là thư viện dễ nhất và mạnh mẽ nhất được gọi là BeautfulSoup. Web Scraping có thể giúp ích rất nhiều nếu được thực hiện đúng cách xem xét các yêu cầu của bạn. Mặc dù chúng tôi đã viết một mã rất đơn giản để cạo địa chỉ email, nhưng nó hoàn toàn miễn phí và bạn cũng không cần phải dựa vào các dịch vụ khác cho việc này. Tôi đã cố gắng hết sức để đơn giản hóa mã càng nhiều càng tốt và cũng thêm chỗ để tùy chỉnh để bạn tối ưu hóa nó theo yêu cầu của riêng bạn. 

Nếu bạn đang tìm kiếm các dịch vụ proxy để sử dụng trong các dự án scraping của mình, đừng quên xem xét ProxyScrape proxy dân dụng và cao cấp