Việc sở hữu danh sách khách hàng tiềm năng qua email có thể giúp các nhà tiếp thị mở rộng quy mô doanh nghiệp của họ. Bằng cách thu thập địa chỉ email bằng các tập lệnh Python, các doanh nhân có thể tiếp cận tốt hơn với đối tượng của mình. MailButler.io cho biết 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 số liệu thống kê này cho thấy mọi người
Việc sở hữu danh sách khách hàng tiềm năng qua email có thể giúp các nhà tiếp thị mở rộng quy mô doanh nghiệp của họ. Bằng cách thu thập địa chỉ email bằng các tập lệnh Python, các doanh nhân có thể tiếp cận đối tượng của mình tốt hơn.
MailButler.io cho biết 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 số liệu thống kê này cho thấy mọi người chủ yếu dựa vào nền tảng email để làm phương thức giao tiếp chính thức. Bài viết này sẽ hướng dẫn bạn quy trình thu thập địa chỉ email bằng ngôn ngữ python.
Một trong những cách dễ nhất để có đượ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ọ thông tin chi tiết về dịch vụ của bạn nhiều lần. Có rất nhiều công cụ thu thập dữ liệu hiện có 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. Chúng cũng cung cấp giới hạn trích xuất dữ liệu không giới hạn, nhưng chúng phải trả phí. Tại sao phải trả phí khi bạn có thể tự tay xây dựng một công cụ như vậy? Chúng ta hãy thảo luận về các bước để xây dựng một công cụ thu thập dữ liệu chất lượng bằng Python.
Bài viết liên quan
Công cụ Python Web Scraping tốt nhất
Mặc dù đây sẽ là một ví dụ rất đơn giản cho người mới bắt đầu, nhưng sẽ là một trải nghiệm học tập, đặc biệt là đối với những người mới làm quen với web scraping. Đây sẽ là hướng dẫn từng bước 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 scraper web thông minh của chúng tôi.
Chúng tôi sẽ sử dụng sáu mô-đun sau cho dự án của mình.
nhập lại nhập yêu cầu từ urllib.parse nhập urlsplit từ bộ sưu tập nhập deque từ bs4 nhập BeautifulSoup nhập pandas dưới dạng pd từ google.colab nhập tệp
Chi tiết về các mô-đun đã nhập được đưa ra dưới đây:
re dùng để khớp biểu thức chính quy. request dùng để gửi yêu cầu HTTP. urlsplit dùng để chia URL thành các phần thành phần. deque là một container có dạng danh sách dùng để thêm vào và bật ra ở mỗi đầu. beautifulsoup dùng để kéo dữ liệu từ các tệp HTML của các trang web khác nhau. pandas dùng để định dạng email vào DataFrame và các hoạt động khác.
Ở bước này, chúng ta sẽ khởi tạo một deque để lưu các URL đã thu thập, các URL chưa thu thập và một tập hợp các email đã thu thập thành công từ các trang web.
# đọc url từ đầu vào original_url = input( "Nhập url của trang web: " ) # để lưu các url cần thu thập unscraped = deque([original_url]) # để lưu các url đã thu thập scraped = set() # để lưu các email đã tải về emails = set()
Không được phép có các phần tử trùng lặp trong một tập hợp, do đó tất cả chúng đều là duy nhất.
Bước đầu tiên là phân biệt giữa URL đã thu thập và chưa thu thập. Cách thực hiện là di chuyển URL từ chưa thu thập sang đã thu thập.
while len(unscraped): # di chuyển unsraped_url đến scraped_urls set url = unscraped.popleft() # popleft(): Xóa và trả về một phần tử từ phía bên trái của deque đã scraped.add (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.
các phần = urlsplit(url)
urlsplit() trả về một bộ gồm 5 thành phần: (sơ đồ đị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ị các đầu vào và đầu ra mẫu cho urlsplit() vì lý do bảo mật, nhưng 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 ta lấy được 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à thời điểm gửi yêu cầu HTTP GET đến trang web.
thử: phản hồi = yêu cầu. lấy (url) ngoại trừ (yêu cầu.ngoại lệ.MissingSchema, yêu cầu.ngoại lệ.ConnectionError): # bỏ qua các trang có lỗi và tiếp tục với url tiếp theo tiếp tục
Để trích xuất địa chỉ email, chúng ta sẽ sử dụng biểu thức chính quy và sau đó thêm chúng vào tập hợp email.
# Bạn có thể chỉnh sửa biểu thức chính quy theo yêu cầu của mình new_emails = set (re.findall( r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com" , response.text, re.I)) # re.I: (bỏ qua trường hợp) emails.update(new_emails)
Biểu thức chính quy rất hữu ích khi bạn muốn trích xuất thông tin theo lựa chọn của riêng bạ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 tới trang web.
# tạo một món súp đẹp cho tài liệu 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.
đố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 neo .attrs: liên kết = neo .attrs[ "href" ] nếu không: liên kết = '' # giải quyết các liên kết tương đối (bắt đầu bằng /) nếu liên kết.startswith('/'): liên kết = base_url + liên kết nếu không liên kết.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 thu thập nếu chúng không có trong hàng đợi đã thu thập hoặc chưa thu thập.
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 trích xuất, vì vậy chúng ta cũng cần loại trừ chúng,
nếu không liên kết .endswith( ".gz" ): nếu không liên kết trong unscraped và không liên kết trong scraped: unscraped.append( link )
Để phân tích kết quả tốt hơn, chúng tôi sẽ xuất email sang tệp CSV.
df = pd.DataFrame(emails, columns =["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 tệp .download( "email.csv" )
Như đã giải thích, tôi không thể hiển thị các địa chỉ email đã xóa vì lý do bảo mật.
[Tuyên bố miễn trừ trách nhiệm! Một số trang web không cho phép thực hiện thu thập dữ liệu web và chúng 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 khi thu thập dữ liệu.]
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
Vì các doanh nghiệp cần nhiều địa chỉ email để xây dựng danh sách liên hệ của mình, nên cần phải thu thập dữ liệu từ nhiều nguồn. Một quy trình thu thập dữ liệu thủ công có thể rất tẻ nhạt và tốn thời gian. Trong trường hợp này, những người thu thập dữ liệu thường sử dụng proxy để tăng tốc quy trình và bỏ qua các hạn chế đi kèm. Proxyscrape cung cấp proxy băng thông cao có khả năng thu thập 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 để ẩn danh tính của người thu thập.
1. Tại sao cần phải thu thập địa chỉ email?
Tạo danh sách liên hệ tiềm năng với các địa chỉ email đủ điều kiện sẽ giúp quá trình tiếp cận đối tượng mục tiêu dễ dàng hơn. Vì hầu hết mọi người sử dụng email làm phương tiện giao tiếp nên việc tiếp cận họ thông qua địa chỉ email khá dễ dàng.
2. Chúng ta 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, trình thu thập có thể gặp 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à xóa các lệnh chặn khi 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?
Thu thập dữ liệu công khai luôn là hợp pháp. Vì vậy, người thu thập phải đảm bảo dữ liệu họ 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 quá trình thu thập.
Trong bài viết này, chúng tôi đã khám phá thêm một điều kỳ diệu nữa của web scraping bằng cách đưa ra một ví dụ thực tế về việc thu thập địa chỉ email. Chúng tôi đã thử phương pháp thông minh nhất bằng cách tạo trình thu thập dữ liệu web của mình bằng Python và đó là thư viện dễ nhất nhưng cũng mạnh mẽ nhất có tên là BeautfulSoup. Web Scraping có thể giúp ích rất nhiều nếu được thực hiện đúng theo 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 để thu thập đị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ỗ cho 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 thu thập dữ liệu của mình, đừng quên xem ProxyScrape proxy dân dụng và cao cấp .