LỜI CẢM ƠN----Sau thời gian học tập, nghiên cứu tại Học viện Công nghệ Bưu chính viễnthông, được sự giúp đỡ và hỗ trợ của các thầy cô giảng dạy, các thầy cô trong khoaCông nghệ thông tin
Trang 1CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Khoa Công Nghệ Thông Tin
Trang 2MỤC LỤC 1
LỜI CẢM ƠN 2
LỜI NÓI ĐẦU 3
CHƯƠNG I: GIỚI THIỆU CHUNG 4
1.1 Lý do chọn đề tài 4
1.2 Giới thiệu về ngôn ngữ lập trình C# 4
CHƯƠNG II: PHÂN TÍCH, THIẾT KẾ ỨNG DỤNG QUÉT EMAIL & THÔNG TIN DOANH NGHIỆP TỪ WEBSITE SỬ DỤNG C# 6
2.1 Giới thiệu bài toán 6
2.2 Chức năng cơ bản của ứng dụng 6
2.3 Biểu đồ User Case 6
2.4 Biểu đồ tuần tự 7
2.5 Biểu đồ trạng thái 9
CHƯƠNG III: KẾT QUẢ CÀI ĐẶT 10
3.1 Cài đặt ứng dụng 10
3.2 Chi tiết các bước thực hiện 10
3.3 Giao diện khi khởi chạy ứng dụng 21
KẾT LUẬN 24
TÀI LIỆU THAM KHẢO 25
Trang 3LỜI CẢM ƠN
Sau thời gian học tập, nghiên cứu tại Học viện Công nghệ Bưu chính viễnthông, được sự giúp đỡ và hỗ trợ của các thầy cô giảng dạy, các thầy cô trong khoaCông nghệ thông tin, đến nay em đã hoàn thành xong bản báo cáo môn học Thực
tập cơ sở với đề tài: Xây dựng Ứng dụng quét email & thông tin doanh nghiệp từ website sử dụng C#
Để có được kết quả này, em xin gửi lời cảm ơn chân thành tới các thầy giáo,
cô giáo khoa Công Nghệ Thông Tin và toàn thể cán bộ, công nhân viên của HọcViện Công Nghệ Bưu Chính Viễn Thông đã tạo điều kiện để em được học tập và
nghiên cứu Đặc biệt là thầy Nguyễn Đình Hiến đã tận tình hướng dẫn, giúp đỡ,
chỉ bảo em trong suốt thời gian thực hiện
Đồng thời, em cũng xin cảm ơn bạn bè, đồng nghiệp đã gắn bó, chia sẻ rấtnhiều kinh nghiệm, những kiến thức quý giá để báo cáo của em có thể hoàn thànhmột cách thành công nhất
Tuy nhiên, do thời gian có hạn và kinh nghiệm còn chưa nhiều nên trong quátrình xây dựng ứng dụng, em không thể tránh khỏi những sai xót
Em rất mong nhận được sự thông cảm và góp ý của quý thầy giáo, cô giáo
Em xin chân thành cảm ơn!
Hà Nội, ngày 20 tháng 04 năm 2023
Sinh viên thực hiện
Vũ Mỹ Hạnh
Trang 4LỜI NÓI ĐẦU
Trong những năm gần đây, với sự phát triển vượt trội của khoa học kỹ thuậtđặt biệt là công nghệ thông tin, với những ứng dụng của công nghệ thông tin vàonhiều lĩnh vực khác nhau đã đóng góp phần to lớn cho sự nghiệp phát triển kinh tế,
xã hội Cùng với sự phát triển của công nghệ, yêu cầu về sự linh hoạt, tiện lợi trongcác ngành, nghề, dịch vụ của con người cũng thay đổi và gia tăng đáng kể
Trong khoảng thời gian chịu ảnh hưởng của đại dịch Covid-19, thói quentiêu dùng và mua sắm của người dân đã thay đổi (chuyển từ mua hàng trực tiếpsang mua hàng trực tuyến) Các sàn thương mại điện tử tại Việt Nam trong nhữngnăm qua liên tục ghi nhận mức tăng trưởng mạnh cả về số lượng người tiêu dùngmua sắm trực tuyến và giá trị mua sắm Điều này được thể hiện rõ trong khi nhiềungành kinh tế khác gặp khó khăn, chật vật xoay sở do chịu ảnh hưởng nặng nề bởidịch bệnh Covid-19, thì thương mại điện tử lại có những điểm sáng và tiếp tục ghinhận sự tăng trưởng ấn tượng
Giai đoạn từ nay đến năm 2025 sẽ là giai đoạn tăng tốc chuyển đổi số vớinhững hành động triển khai cụ thể theo từng ngành, từng lĩnh vực, từng địaphương Điều đó đòi hỏi các doanh nghiệp không chỉ lớn mà còn cả các doanhnghiệp vừa, nhỏ, kể cả là các hộ kinh doanh cá thể phải luôn sáng tạo, vận dụngkhoa học công nghệ vào sản xuất, quản lý,… để đáp ứng nhu cầu thực tại và mongmuốn của người tiêu dùng Do đó, việc quản lý mua bán hàng qua mạng càng cầnphát triển và áp dụng rộng rãi hơn Thay vì việc người mua hàng đi tìm sản phẩm,thì hiện nay các cá nhân, công ty hay doanh nghiệp họ sẽ chủ động hơn trong việcquảng bá sản phẩm, dịch vụ của mình tới người tiêu dùng Để làm được việc đómột cách dễ dàng thì họ đã tìm đến các giải pháp marketing: SMS marketing, emailmarketing, facebook marketing, tiktok marketing…Tuy nhiên xét về chi phí và độphức tạp thì email marketing là tối ưu hơn cả Vậy làm sao để lấy được email củacác cá nhân, công ty, doanh nghiệp? Vậy nên, trong dự án lần này tôi xin chia sẻgiải pháp hữu ích để lấy được số lượng lớn email của các cá nhân, công ty, doanhnghiệp từ một website bất kỳ
Hoàn thành báo cáo này, em xin được gửi lời cảm ơn chân thành đến cácthầy, cô khoa Công nghệ thông đã hết lòng truyền đạt kiến thức cho em trong quá
Trang 5Em xin chân thành cảm ơn!
Trang 6CHƯƠNG I: GIỚI THIỆU CHUNG 1.1 Lý do chọn đề tài
Chúng ta đang sống trong thời đại công nghệ 4.0, thời đại của các ứng dụngcông nghệ hiện đại được áp dụng phổ biến rộng rãi trong thực tiễn
So với kinh doanh truyền thống thì thương mại điện tử (TMDT) có chi phíthấp hơn, linh hoạt hơn, hiệu quả đạt cao hơn Hơn thế nữa, với lợi thế của côngnghệ Internet nên việc truyền tải thông tin về sản phẩm nhanh chóng, thuận tiện.Kết hợp với bộ phận giao hàng tận nơi thông qua bưu điện,… thanh toán trựctuyến, càng tăng thêm thuận lợi để loại hình này phát triển
Các công ty, doanh nghiệp lớn nhỏ đã và đang áp dụng marketing để đưa sảnphẩm, dịch vụ của mình tới tận tay người tiêu dùng trong thời gian ngắn nhất màkhông mất quá nhiều chi phí Chính vì vậy trong dự án lần này, tôi xin giới thiệu về
ứng dụng Quét email & thông tin doanh nghiệp trên trang website sử dụng C#
Ứng dụng này được áp dụng khá nhiều vào chiến dịch marketing của các công ty,
doanh nghiệp, các nhân…(email marketing) Email Marketing hay marketing qua
email là hình thức các doanh nghiệp sử dụng email để marketing, giới thiệu sản
phẩm/dịch vụ tới khách hàng mục tiêu, hỗ trợ duy trì mối quan hệ, xây dựng lòngtrung thành giữa khách hàng và doanh nghiệp Qua đó thúc đẩy hành vi mua hàng
và nâng cao hiệu quả doanh thu
Mặc dù Email marketing không còn là một thuật ngữ quá xa lạ với dân trongngành, tuy nhiên với những bạn mới bắt đầu tìm hiểu về marketing thì đây có thể làmột khái niệm còn mới mẻ
So với SMS marketing thì Email marketing vẫn được sử dụng rộng rãi vàmang lại hiệu quả tốt hơn nhờ tốc độ truyền tải vượt trội, chi phí hoạt động thấphơn Điều này vừa giúp doanh nghiệp đạt hiệu quả marketing lại vừa tối ưu về chiphí
1.2 Giới thiệu về ngôn ngữ lập trình C#
C# (C Sharp, đọc là "xi-sáp") là một ngôn ngữ lập trình hướng đối tượng đa
năng, mạnh mẽ được phát triển bởi Microsoft, C# là phần khởi đầu cho kếhoạch NET của họ Tên của ngôn ngữ bao gồm ký tự thăng theo Microsoft nhưngtheo ECMA là C#, chỉ bao gồm dấu số thường
Microsoft phát triển C# dựa trên C++ và Java C# được miêu tả là ngôn ngữ
có được sự cân bằng giữa C++, Visual Basic, Delphi và Java
Trang 71.2.1 Ưu điểm của C#
C# là ngôn ngữ lập trình mã nguồn mở,vì vậy C# là miễn phí với tất cả mọingười, đồng thời mọi người đều có thể cùng tham gia phát triển, đề xuất thiết
C# có IDE Visual Studio cùng nhiều plug-in vô cùng mạnh mẽ Ngoài ra cóthể viết C# bằng bất kỳ text editor nào khác như Visual Studio Code, Vim,Netbeam
C# có cấu trúc khá gần gũi với các ngôn ngữ lập trình truyền thống, songcũng được bổ sung các yếu tố mang tính hiện đại nên dễ dàng tiếp cận chongười mới học và học nhanh với C#
C# có cộng đồng nhà phát triển vô cùng lớn mạnh
C# được phát triển và cải tiến không ngừng với tần suất 1 phiên bản/ 1 năm,đáp ứng các mong muốn cải thiện, cải tiến cho phù hợp với nhu cầu côngnghệ của các nhà phát triển
C# có tài liệu tham khảo và hướng dẫn vô cùng phong phú và chất lượng,đồng thời có các buổi hội thảo giới thiệu tính năng mới và định hướng pháttriển ngôn ngữ trong tương lai
C# và.NET được đánh giá là có design tốt, vì vậy cú pháp và logic rất nhấtquán, mã nguồn C# dễ đọc và mở rộng
C# được thiết kế và phát triển bởi Microsoft nên rất được Microsoft quantâm và hỗ trợ
1.2.2 Nhược điểm của C#
Nhược điểm lớn nhất của C# là chỉ chạy trên nền Windows và có cài NET Framework Thao tác đối với phần cứng yếu hơn so với ngôn ngữ khác, hầu hết phải dựa vào windows
Trang 8CHƯƠNG II: PHÂN TÍCH, THIẾT KẾ ỨNG DỤNG QUÉT EMAIL & THÔNG TIN DOANH NGHIỆP TỪ WEBSITE SỬ DỤNG C#
2.1 Giới thiệu bài toán
Ứng dụng quét emai và thông tin doanh nghiệp từ website là một ứng dụng
có thể nói là cần thiết đối với cá nhân, công ty, doanh nghiệp có sử dụng các dịch
vụ marketing để quảng bá sản phẩm, dịch vụ của mình tới người tiêu dùng
2.2 Chức năng cơ bản của ứng dụng
- Quét toàn bộ email có trong 1 website
- Xuất danh sách email ra file text
- Quét toàn bộ thông tin doanh nghiệp có trong 1 website
- Xuất kết quả thông tin doanh nghiệp quét được ra file excel
2.3 Biểu đồ User Case
Hình 1 Biểu đồ use-case 1
Trang 9Hình 2 Biểu đồ use-case 2
2.4 Biểu đồ tuần tự
Hình 3 Biểu đồ tuần tự Lấy email
Trang 10Hình 4 Biểu đồ tuần tự Lấy thông tin doanh nghiệp
Trang 112.5 Biểu đồ trạng thái
Hình 5 Biểu đồ trạng thái Lấy email
Hình 6 Biểu đồ trạng thái Lấy thông tin doanh nghiệp
Trang 12CHƯƠNG III: KẾT QUẢ CÀI ĐẶT 3.1 Cài đặt ứng dụng
Trong dự án “Ứng dụng quét email & thông tin doanh nghiệp trên website”
lần này cần cài đặt: Visual studio 2022
Ngôn ngữ sử dụng: C#
Trong dự án lần này tôi thực hiện quét email & thông tin doanh nghiệp trên
một website cụ thể: https://trangvangvietnam.com
3.2 Chi tiết các bước thực hiện
Tạo project mới trong Visual Studio 2022 Trong dự án này tôi đặt tên cho
project là: EmailHunter (File -> New -> Project->Next)
Hình 7 Giao hiện khi tạo project mới
Sau khi bấm “Next” Trong project sẽ tự động tạo ra 2 form:
form1.css (code và thao tác bắt sự kiện cho các button)
form1.css[design] (thiết kế giao diện)
Trong phần thiết kế giao diện tạo:
Trang 132 Richtexbox (hiển thị toàn bộ url doanh nghiệp, hiển thị toàn bộ email lấy
được từ website, hiển thị toàn bộ thông tin doanh nghiệp lấy được từ website)
Hình 8 Giao diện chính trong file Form1.css[design]
Khởi tạo các hàm, các biến cần dùng: listmail, listurls, listdoanhnghiep, ten, email, url, diachi, hotline, daidien…
3.2.1 Sự kiện nút “Lấy email”
Việc trước tiên đó là lấy url của trang html của website: trong bước này điều quan trọng đó là xác định được nguồn trang của website đó (tức là phải lấy được trang html của website) Ta thực hiện Ctr + U hoặc click chuộtphải vào trang web rồi chọn “Xem nguồn trang”
Trang 14Hình 9 Trang html của website
Trong Form1.css tôi thực hiện các công việc chính như sau:
public void GetAllMail(string url)
{
int pageCounter = Int16.Parse(comboBoxPage.SelectedItem.ToString());
for (int page = 1; page <= pageCounter; page++)
{
//Lấy đường dẫn url page
Log("Lấy dữ liệu page: " + page);
var builder = new UriBuilder(url);
var query = System.Web.HttpUtility.ParseQueryString(builder.Query);
Dùng biểu thức chính quy Regex Expressions để lọc Email
Lấy tất cả email lọc được cho vào 1 list
Lọc các email trùng nhau
Thêm email đã quét được ở 1 page vào list tổng – listMail
Lưu toàn bộ email lọc được ra Notpad++
public void GetEmailPage(string url)
{
try
{
//Lấy html của url
var request = WebRequest.Create(url);
var response = request.GetResponse();
var stream = response.GetResponseStream();
var reader = new StreamReader(stream);
var content = reader.ReadToEnd();
//Dùng biểu thức chính quy Regex Expressions để lọc Email
var pattern = @"([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)";
var regex = new Regex(pattern);
var matches = regex.Matches(content);
//Lấy tất cả mail quét được cho vào 1 list
List<string> listEmailTemp = new List<string>();
foreach (Match match in matches)
Trang 15Giải thích theo thứ tự lần lượt:
@ Là ký tự bắt đầu của chuỗi
xuất hiện 1 hoặc nhiều lần, trong đó bao gồm các ký tự a-z, A-Z, số từ 0-9 và các
ký tự đặc biệt như hoặc _ hoặc –
@ Là ký tự @ giữa tên người dùng và tên miền (domain name)
hiện 1 hoặc nhiều lần, trong đó bao gồm các ký tự a-z, A-Z, số từ 0-9 và các ký tự đặc biệt như hoặc _ hoặc –
\ Đại diện cho dấu chấm trong tên miền Ký tự \ được sử dụng để thoát khỏi ký tự đặc biệt này
ít nhất 2 ký tự a-z hoặc A-Z
+ Là ký tự kết thúc của chuỗi
Trong dự án này tôi sử dụng Notpad++ để lưu toàn bộ email lọc được từ website
3.2.2 Sự kiện nút “Lưu file”
private void btnSave_Click(object sender, EventArgs e)
Trang 163.2.3 Sự kiện nút “Lấy danh sách”
Để lấy được thông tin doanh nghiệp thì điều trước tiên là phải lấy được danh sách URL của toàn bộ các doanh nghiệp đó Để thực hiện việc này cần sử dụng tới
thư viện Selenium (Thư viện auto chorme – trình duyệt web tự động)
//Lấy số trang cần quét
int pageCounter = Int16.Parse(comboBoxPage.SelectedItem.ToString());
//Lấy danh sách url
for (int i=1; i<= pageCounter; i++)
{
Log("Lấy danh sách tại trang " + i);
//Xây dựng link để lấy chính xác trang cần lấy (page=2)
UriBuilder uriBuilder = new UriBuilder(txtUrl.Text);
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
Trang 17//Quét xong, in ra tổng số doanh nghiệp quét được
Log("Tổng số Doanh Nghiệp: " + listUrls.Count);
//Đóng chrome
driver.Quit();
}
Trang 183.2.4 Sự kiện nút “Lấy data”
private void btnLayData_Click(object sender, EventArgs e)
{
//Tạo luồng gọi hàm lấy data
Thread threadGetData = new Thread(() => GetData());
threadGetData.Start();
}
//hàm lấy data doanh nghiệp
public void GetData()
ChromeOptions chromeOptions = new ChromeOptions();
List<string> list = new List<string>
Trang 20var InfoElements =
driver.FindElements(By.XPath("//div[@id='listing_detail_right']/div[1]/div"));
foreach (var InfoElement in InfoElements)
{
string txt = InfoElement.Text.Trim(); //Nếu div đó chứa họ tên thì trích xuất ra họ tên if(txt.Contains("Họ tên:")) {
daidien = txt.Replace("Họ tên:","").Trim(); Log(daidien); }
//Nếu div đó chứa điện thoại thì trích xuất điện thoại else if (txt.Contains("Điện thoại:")) {
sdt = txt.Replace("Điện thoại:", "").Trim(); Log(sdt); }
//Nếu div đó chứa di động thì trích xuất đi động else if (txt.Contains("Di động:")) {
hotline = txt.Replace("Di động:", "").Trim(); Log(hotline); }
}
if (ten != "") {
//Nếu lấy được tên doanh nghiệp thì sẽ thêm doanh nghiệp đó vào list (các trường khác có thể thiếu) DoanhNghiep dn = new DoanhNghiep(ten, email,url,diachi,sdt,hotline,daidien); listDN.Add(dn); }
}
catch (Exception) {
//tăng biến dem_loi nếu xảy ra lỗi dem_loi++; Log("Lỗi lấy thông tin Doanh nghiệp"); //Dừng quét nếu gặp nhiều lỗi if (dem_loi > 3) {
Log("Tạm dừng quét do gặp nhiều lỗi"); break; }
}
Log(" -");
}
//Đóng chrome
driver.Quit();
Trang 21private void btnLuuExcel_Click(object sender, EventArgs e)
//Gọi hộp thoại lưu file
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Excel | *.xlsx | Excel 2003 | *.xls";
//Cài đặt một số thông tin file excel
excelPackage.Workbook.Properties.Author = "Vu My Hanh";
excelPackage.Workbook.Properties.Title = "Email Hunter";
//Cài đặt header cho từng cột
string[] arrheader = new string[] { "STT", "Url", "Tên", "Đại diện", "Email",