Tải bản đầy đủ (.docx) (65 trang)

Ứng dụng công nghệ web crawler và web scraper xây dựng website thu thập và tổng hợp thông tin tìm việc làm trên internet

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.24 MB, 65 trang )

LỜI CẢM ƠN
Tôi xin bày tỏ lòng biết ơn sâu sắc của mình đến thầy Đàm Thanh
Phương, thuộc bộ môn Khoa học cơ bản, trường Đại học Công Nghệ Thông Tin
& Truyền Thông – Đại Học Thái Nguyên. Trong quá trình thực hiện đồ án tốt
nghiệp, thầy đã nhiệt tình giúp đỡ, giải đáp các thắc mắc tạo động lực giúp tôi
hoàn thành đồ án tốt nghiệp này.
Tôi cũng xin được bày tỏ lời cảm ơn tới các thầy cô trong bộ môn Mạng
& Truyền thông cũng như các thầy cô ở trường đã nhiệt tình giảng dạy để giúp
chúng tôi có được như ngày hôm nay.
Cuối cùng là lời cảm ơn tới gia đình, bạn bè những người luôn sát cánh
bên tôi những lúc khó khăn, luôn ủng hộ giúp đỡ để tôi hoàn thành đồ án này.

1


LỜI CAM ĐOAN
Tôi xin cam đoan đồ án tốt nghiệp “Ứng dụng công nghệ web crawler và
web scraper xây dựng website thu thập và tổng hợp thông tin tìm việc làm trên
internet” là công trình nghiên cứu của bản thân. Những phần sử dụng tài liệu
tham khảo trong đồ án đã được nêu rõ trong phần tài liệu tham khảo. Các số liệu,
kết quả trình bày trong đồ án là hoàn toàn trung thực, nếu sai tôi xin chịu hoàn
toàn trách nhiệm và chịu mọi kỷ luật của bộ môn và nhà trường đề ra.

Tác giả đồ án
Hoàng Minh Tuấn

2


TÓM TẮT NỘI DUNG
Do nhu cầu thu thập thông tin của con người ngày càng tăng, lượng thông


tin trên internet ngày càng phong phú nên vấn đề tổng hợp thông tin ngày càng
trở nên bức thiết. Với một lượng dữ liệu lớn việc thu thập bằng tay tốn rất nhiều
công sức, và không đạt hiệu quả cao, chính vì thế cần một công nghệ có thể tổng
hợp thông tin một cách tự động và trình thu thập web đã ra đời.
Đề tài đặt ra vấn đề tìm hiểu về trình thu thập thông tin trên web và bước
đầu sẽ xây dựng một ứng dụng có khả năng tổng hợp thông tin tự động từ một số
website

tìm

việc

làm



trang

/>


trang

Ứng dụng được xây dựng bằng công nghệ
ASP.NET MVC 3 trên nền ngôn ngữ C# tương tác với cơ sở dữ liệu SQL Server
dựa trên các tiêu chí: tốc độ thu thập nhanh, cơ sở dữ liệu gọn nhẹ, đảm bảo tính
toàn vẹn của tài liệu gốc.

3



MỤC LỤC

4


BẢNG DANH MỤC CÁC HÌNH MINH HỌA
Ảnh 1.1: Kiến trúc Net FrameWork
Ảnh 1.2: Mô hình MVC
Ảnh 2.1: Một vòng thu thập web cơ bản
Ảnh 2.2: Mô hình cây tương ứng với một mã nguồn HTML
Ảnh 2.3: Một mô hình trình thu thập đa luồng
Ảnh 2.4: Hình minh họa về độ hoàn chỉnh và độ chính xác
Ảnh 2.5: Hình mình họa thu hồi mục tiêu
Ảnh 2.6: So sánh giữa thuật toán breadth-first và naive best-first: (a) Theo độ
chính xác trung bình (b) Theo độ thu hồi mục tiêu trung bình
Ảnh 3.1: World wide web
Ảnh 3.2: Tương tác client và server
Ảnh 3.3: Add-ons firebug của trình duyệt firefox
Ảnh 3.4: Category website vietnamworks
Ảnh 3.5: Category website vieclam.24h.com.vn
Ảnh 3.6: Bộ lọc kết quả tìm kiếm
Ảnh 3.7: Danh sách các bản ghi
Ảnh 3.8: Mã HTML thu được sau khi Crawl 1 link đầu vào
Ảnh 3.9: Các bảng trong CSDL
Ảnh 3.10: Giao diện website thông tin tìm việc làm

5



MỞ ĐẦU
Ngày nay nhờ sự bùng nổ của công nghệ thông tin, lịch sử nhân loại đã
bước sang một trang mới. Những thành tựu của ngành công nghệ thông tin là vô
cùng to lớn, nó đã chi phối và làm thay đổi mọi mặt của đời sống xã hội, làm
cho cuộc sống của con người văn minh, hiện đại hơn. Sự ra đời của internet
chính là bước tiến vĩ đại của nhân loại, là yếu tố quan trọng bậc nhất chi phối
cuộc sống của chúng ta ngày nay. Nhờ có internet thế giới trở nên ‘phẳng’ hơn, ở
mọi nơi trên trái đất chúng ta đều có thể học tập và tìm kiếm thông tin.
Theo guồng quay của cuộc sống, thế giới internet ngày càng rộng lớn và
phong phú hơn. Cứ mỗi phút trôi qua có thêm hàng triệu trang web được sinh ra
để làm giàu cho vốn tài nguyên tri thức của nhân loại. Nhưng cũng chính vì thế
mà việc chọn lọc, tìm kiếm thông tin lại trở nên khó khăn hơn. Với kho dữ liệu
đồ sộ như internet, vấn đề trích xuất và tổng hợp thông tin đã trở thành vấn đề
thực sự cấp thiết hiện nay. Nếu giải quyết được vấn đề này chúng ta sẽ loại bỏ
được một chướng ngại lớn trên con đường tổng hợp thông tin của nhân loại.
Đề tài đặt ra vấn đề nghiên cứu về trình thu thập thông tin trên web và
bước đầu sẽ xây dựng một ứng dụng có khả năng tổng hợp thông tin tự động từ
các trang web tìm kiếm việc làm. Đề tài nếu thành công thì trước mắt sẽ là công
cụ hữu hiệu giúp kết nối người lao động với các nhà tuyển dụng sau đó sẽ là
bước đi không nhỏ giúp cho việc tổng hợp thông tin trở nên đơn giản hơn, giảm
được nhiều chi phí công sức so với việc tổng hợp thủ công, và là tiền đề để xây
dựng nên một hệ thống máy tìm kiếm cho người Việt Nam.
Nội dung của đồ án sẽ tập trung vào các mục tiêu chính sau:
-

Đưa ra được một cái nhìn tổng quát về trình thu thập (web crawler)

-

và kỹ thuật bóc tách dữ liệu web (web scraper)

Xây dựng một ứng dụng website tổng hợp thông tin về việc làm từ
nhiều nguồn khác nhau trên internet.

Để giải quyết được các mục tiêu này, đồ án được chia thành ba chương
lớn:
6


Chương 1: Tổng quan về đề tài
Trong chương này sẽ giới thiệu tổng quan về đề tài, mục đích cũng như ý
nghĩa thực tiễn, các công nghệ liên quan, ngôn ngữ sử dụng.
Chương 2: Tìm hiểu về trình thu thập web
Trong chương này sẽ tìm hiểu các khái niệm cơ bản trong trình thu thập
web. Phần lớn nội dung trong chương này sẽ đi sâu vào việc tìm hiểu các thành
phần cấu thành nên một trình thu thập, các chiến lược thu thập dữ liệu, việc đánh
giá của trình thu thập đối với trang web. Qua đó chúng ta sẽ có một cái nhìn
chung về trình thu thập web, và có thể hiểu hơn về các giá trị thực tiễn mà nó
mang lại trong đời sống của con người.
Chương 3: Xây dựng ứng dụng website tổng hợp thông tin
Phần đầu chương sẽ trình bày về các kiến thức nền tảng và các thư viện hỗ
trợ, ở phần tiếp theo là các đánh giá phân tích và các giải pháp nhằm nâng cao
hiệu suất của trình thu thập, phần cuối chương là việc hiện thực hóa ứng dụng
thông qua việc xây dựng hệ thống cơ sở dữ liệu, Crawler Service và website.

7


CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI
Đề tài đặt ra vấn đề tìm hiểu về trình thu thập thông tin trên web, từ đó

xây dựng một ứng dụng có khả năng tổng hợp thông tin tự động từ một số web
tìm việc làm.Website có nguồn dữ liệu phong phú, đa dạng, thông tin cập nhật thường
xuyên đáp ứng nhu cầu tìm việc làm cho người lao động.

1.2 GIỚI THIỆU VỀ TRÌNH THU THẬP WEB
Trình thu thập web (Web crawler) là một chương trình khai thác cấu trúc
đồ thị của web di chuyển từ trang này qua trang khác. Thời kỳ đầu nó có những
tên khá tượng hình như bọ web, rô-bốt, nhện và sâu, nhưng ngày nay tên gọi phổ
biến nhất là vẫn là trình thu thập web. Mặc dù vậy cụm từ ‘thu thập’ không lột tả
được hết tốc độ của những chương trình này, vì chúng có tốc độ làm việc đáng
kinh ngạc, có thể thu thập dữ liệu lên đến hàng chục ngàn trang trong vòng một
vài phút.
Từ thời kỳ đầu, một động lực quan trọng thúc đẩy quá trình phát triển của
việc thiết kế trình thu thập web là lấy được nội dung các trang web và thêm
chúng hoặc đường dẫn của chúng vào một kho lưu trữ trang – một kiểu kho lưu
trữ có thể dùng để phục vụ cho các ứng dụng cụ thể trong công cụ tìm kiếm web
(search engine).
Các trình thu thập thường bắt đầu bằng cách chọn một số các đường dẫn
(URL) ứng với các trang web sẽ ghé thăm đầu tiên, các trang này được gọi là các
trang hạt giống. Khi ghé thăm một trang hạt giống, trình thu thập sẽ đọc nội dung
trang web, lọc ra tất cả các siêu liên kết (hyperlink) có trong trang web đó và đưa
các URL tương ứng với chúng vào một danh sách gọi là biên giới (frontier). Dựa
vào danh sách này, trình thu thập tiếp tục quá trình duyệt đệ quy để ghé thăm tất
cả các URL chưa được duyệt. Quá trình này chỉ dừng lại khi trình thu thập đã thu
thập đủ số trang yêu cầu hoặc frontier là rỗng, tức là không còn URL để duyệt.
Tuy mô tả này có vẻ đơn giản nhưng đằng sau chúng là khá nhiều vấn đề hóc búa
liên quan đến kết nối mạng, bẫy nhện, tiêu chuẩn trích xuất URL, chuẩn hóa các
8



trang HTML, bóc tách nội dung trang HTML vv... Ở phần sau của đồ án tôi sẽ
lần lượt trình bày đến các vấn đề này và hướng giải quyết của chúng.
Sau khi đã có được một danh sách các URL dùng cho việc thu thập, ta sẽ
thực hiện quá trình lấy trang. Tất cả các trang được lấy một lần và được lưu vào
một kho lưu trữ giống như cơ sở dữ liệu của công cụ tìm kiếm, đến đây không
cần thu thập thêm. Tuy nhiên web là một thực thể năng động với các không gian
con liên tục phát triển và thay đổi nhanh một cách chóng mặt, vì thế thông tin
phải liên tục được thu thập để giúp các ứng dụng luôn cập nhật, ví dụ như bổ
sung các trang mới loại bỏ các trang đã bị xóa, di chuyển hoặc cập nhật các trang
bị sửa đổi.
Các trang web chủ yếu được viết bằng các ngôn ngữ đánh dấu như
HTML, XHTML và được nhắm đến đối tượng sử dụng là con người chứ không
phải máy tính. Các trang web lại chứa đựng nhiều thông tin có ích mà con người
có thể muốn thu thập và lưu trữ lại, chính vì thế mà cần phải có những kỹ thuật
bóc tách và trích xuất thông tin theo một cơ chế tự động. Các kỹ thuật bóc tách
dữ liệu (parsing) có thể ở mức đơn giản như việc bóc tách các siêu liên kết, hoặc
ở mức phức tạp hơn một chút là bóc tách bất kỳ phần nội dung nào trong một
trang web.
Về bản chất, quá trình thu thập web chính là quá trình duyệt đệ quy một
đồ thị. Các web được xem như một đồ thị với các trang là các đỉnh (node) và các
siêu liên kết là các cạnh. Quá trình lấy trang và trích xuất các liên kết bên trong
nó tương tự như việc mở rộng tìm kiếm một đỉnh trong đồ thị. Việc tìm kiếm này
là khác nhau trong các trình thu thập sử dụng chiến lược tìm kiếm khác nhau.
Phần sau của đồ án tôi sẽ trình bày sâu hơn về các chiến lược tìm kiếm và đưa ra
các số liệu thống kê để so sánh hiệu suất của các chiến lược tìm kiếm này từ đó
rút ra đánh giá về hiệu suất của các trình thu thập.
Trình thu thập web là thành phần đầu tiên trong toàn bộ hệ thống search
engine. Mục đích chung của các hệ thống search engine là số lượng trang web
đầu vào đạt giá trị cao nhất có thể, trong đó trình thu thập web làm công việc
9



chính là duy trì cơ sở dữ liệu được đánh chỉ mục, trả về giá trị của bộ thu thập và
bộ lập chỉ mục cho hàng triệu truy vấn nhận được từ người dùng. Các trang được
đánh chỉ mục dựa trên các thuật toán ưu tiên hoặc dựa vào các phương pháp dựa
trên kinh nghiệm (heuristic). Ngoài ra, chúng ta có thể sử dụng trình thu thập
web để xây dựng các phần mềm tập trung thông tin, các trang web tổng hợp
thông tin, dựa trên cơ chế tự động tìm và phát hiện tài nguyên.
1.3 TỔNG QUAN VỀ NGÔN NGỮ VÀ NỀN TẢNG SỬ DỤNG
Hệ thống được phát triển trên nền: .NET Framework 3.5. Công cụ phát
triển Microsoft Visual Studio 2010 sử dụng ngôn ngữ lập trình C# và Asp.net
MVC 3. Hệ quản trị cơ sở dữ liệu Sql Server 2008.
Trong phần tiếp theo tôi sẽ trình bày chi tiết hơn về các công nghệ sử
dụng để xây dựng ứng dụng website tổng hợp thông tin.
1.3.1 Net Framework
.NET Framework 3.5 của Microsoft là một khung lập trình tập hợp các thư
viện lập trình có thể được cài thêm hoặc đã có sẵn trong các hệ điều hành
Windows. Nó cung cấp những giải pháp thiết yếu cho những yêu cầu thông
thường của các chương trình điện toán như lập trình giao diện người dùng, truy
cập dữ liệu, kết nối cơ sở dữ liệu, ứng dụng web, các giải thuật số học và giao
tiếp mạng. Ngoài ra, khung lập trình .NET quản lý việc thực thi các chương
trình .NET do đó người dùng cần phải cài .NET để có thể chạy các chương trình.

10


Mô hình kiến trúc Net FrameWork:

Ảnh 1.1: Kiến trúc Net FrameWork
Kiến trúc .Net Framework gồm 3 tầng:

-

Tầng ứng dụng: gồm có ASP.Net và Windows Forms
Tầng giữa: cung cấp các thư viện lập trình cơ sở
Tầng dưới cùng: quản lý việc biên dịch và chạy các ứng dụng
Tầng dưới cùng Common Language Runtime (CLR) là tẩng tâm điểm và
quan trọng nhất của .Net Framework. Khi sử dụng .Net Framework, chúng
ta sẽ không còn phải quá quan tâm đến việc lựa chọn ngôn ngữ nào để
phát triển ứng dụng. Thậm chí trong 1 ứng dụng ta có thể viết bằng nhiều
ngôn ngữ .Net khác nhau. Có được điều này là do tất cả các ngôn ngữ .Net
đều được quản lý bởi CLR.

1.3.2 Tổng quan về ASP.NET MVC
A, Nguồn gốc ASP.NET MVC
Công nghệ ASP.NET MVC là mới, tuy nhiên nó có lịch sử lâu đời. Nền
tảng MVC được phát minh bởi Trygve Renskaug, ông đã viết trang giấy đầu tiên
nói về MVC vào năm 1978. Ban đầu nó được gọi là Thing Model View Editor
pattern, nhưng sau đó nó được đặt tên lại là Model View Controller pattern.
11


ASP.NET MVC lần đầu tiên xuất hiện đó là trong dự án mã nguồn mở
MonoRail. Và nguồn gốc thật sự để cho ra đời công nghệ Microsoft ASP.NET
MVC là do Scott Guthrie (một trong những nhà sáng tạo ra ASP.NET) trên
chuyến bay đến Austin, Texas để nói về hội thảo Alt.NET vào tháng 10-2007.
Cuối cùng thì đầu năm 2009 phiên bản ASP.NET MVC 1.0 (released)
được ra đời.
Điều kiện cần để xây dựng ứng dụng ASP.NET MVC:
-


Microsoft.Net Framework 3.5 SP1
Microsoft ASP.NET MVC
Visual Studio 2008 SP1

B, Các thành phần cấu thành ASP.NET MVC
Ứng dụng MVC (là từ viết tắt của Model – View – Controler) được chia
ra làm 3 phần:
-

Model: Là những thành phần có nhiệm vụ lưu trữ thông tin, trạng
thái của các đối tượng, thông thường nó là một lớp được ánh xạ từ

-

một bảng trong CSDL. Tầng này được tách ra riêng biệt
View: View của MVC chứa các thẻ HTML và view logic.View là
các thành phần chịu trách nhiệm hiển thị các thông tin lên cho
người dùng thông qua giao diện. Thông thường, các thông tin cần
hiển thị được lấy từ thành phần Models. Ví dụ, đối tượng Product
có một "Edit" view bao gồm các textboxes, các dropdowns và
checkboxes để chỉnh sửa các thuộc tính của sản phẩm; có một
"Display" view gồm 2 dòng, cột dòng là ProductID, dòng sau là

-

OrderDate... để xem thông tin về sản phẩm.
Controller: Chịu trách nhiệm xử lý các tác động về mặt giao diện,
các thao tác đối với models, và cuối cùng là chọn một view thích
hợp để hiển thị ra màn hình. Trong kiến trúc MVC, view chỉ có tác
dụng hiển thị giao diện mà thôi, còn điều kiển dòng nhập xuất của

người dùng vẫn do Controllers đảm trách. Controller của MVC
chứa tính logic trong lưu đồ điều khiển

12


Ảnh 1.2: Mô hình MVC
C, Những lợi ích của mô hình MVC
ASP.NET MVC là một framework được Microsoft phát triển với cấu trúc
chia thành ba tầng model-view-controller: đầu vào của controller là các điều
khiển thông qua HTTP request, model chứa các miền logic, view là những thứ
được sinh ra trả về cho trình duyệt.
Lợi ích của việc dùng phương pháp MVC là sự phân đoạn rõ ràng giữa
models, views, controllers bên trong ứng dụng. Cấu trúc sạch sẽ giúp cho việc
kiểm tra lỗi ứng dụng trở nên dễ dàng hơn, mặt khác microsoft còn hổ trợ
Nhibernate được thiết kế riêng cho tầng model với độ mềm dẻo khá cao.
1.3.3 Ngôn ngữ C#
C# là một ngôn ngữ rất đơn giản, với khoảng 80 từ khoá và hơn mười kiểu
dữ liệu dựng sẵn, nhưng C# có tính diễn đạt cao. C# hỗ trợ lập trình có cấu trúc,
hướng đối tượng, hướng thành phần (component oriented). Trọng tâm của ngôn
ngữ hướng đối tượng là lớp. Lớp định nghĩa kiểu dữ liệu mới, cho phép mở rộng
ngôn ngữ theo hướng cần giải quyết. C# có những từ khoá dành cho việc khai
báo lớp, phương thức, thuộc tính (property) mới. C# hỗ trợ đầy đủ khái niệm trụ
cột trong lập trình hướng đối tượng: đóng gói, thừa kế, đa hình.
Định nghĩa lớp trong C# không đòi hỏi tách rời tập tin tiêu đề với tập tin cài đặt
như C++. Hơn thế, C# hỗ trợ kiểu sưu liệu mới, cho phép sưu liệu trực tiếp trong
tập tin mã nguồn. Đến khi biên dịch sẽ tạo tập tin sưu liệu theo định dạng XML.

13



C# hỗ trợ khái niệm giao diện, interfaces (tương tự Java). Một lớp chỉ có
thể kế thừa duy nhất một lớp cha nhưng có thế cài đặt nhiều giao diện.
C# có kiểu cấu trúc, struct (không giống C++). Cấu trúc là kiểu hạng nhẹ
và bị giới hạn.Cấu trúc không thể thừa kế lớp hay được kế thừa nhưng có thể cài
đặt giao diện.
C# cung cấp những đặc trưng lập trình hướng thành phần như property, sự
kiện và dẫn hướng khai báo (được gọi là attribute). Lập trình hướng component
được hỗ trợ bởi CLR thông qua siêu dữ liệu (metadata). Siêu dữ liệu mô tả các
lớp bao gồm các phương thức và thuộc tính, các thông tin bảo mật ….
Assembly là một tập hợp các tập tin mà theo cách nhìn của lập trình viên
là các thư viện liên kết động (DLL) hay tập tin thực thi (EXE). Trong .NET một
assembly là một đon vị của việc tái sử dụng, xác định phiên bản, bảo mật, và
phân phối. CLR cung cấp một số các lớp để thao tác với assembly.
C# cũng cho truy cập trực tiếp bộ nhớ dùng con trỏ kiểu C++, nhưng vùng
mã đó được xem như không an toàn. CLR sẽ không thực thi việc thu dọn rác tự
động các đối tượng được tham chiếu bởi con trỏ cho đến khi lập trình viên tự giải
phóng.
A, Lớp và đối tượng
Đối tượng:
Bản chất của lập trình hướng đối tượng là tạo ra các kiểu mới. Một kiểu
biểu diễn một vật gì đó. Giống với các ngôn ngữ lập trình hướng đối tượng khác,
một kiểu trong C# cũng định nghĩa bằng từ khoá class (và được gọi là lớp) còn
thể hiện của lớp được gọi là đối tượng.
Đối tượng là một trị có thể được tạo ra, lưu giữ và sử dụng. Trong C# tất
cả các biến đều là đối tượng. Các biến kiểu số, kiểu chuỗi … đều là đối tượng.
Mỗi một đối tượng đều có các biến thành viên để lưu giữ dữ liệu và có các
phương thức (hàm) để tác động lên biến thành viên. Mỗi đối tượng thuộc về một

14



lớp đối tương nào đó. Các đối tượng có cùng lớp thì có cùng các biến thành viên
và phương thức.
Lớp:
Định nghĩa một lớp mới với cú pháp như sau:
[attribute][bổ từ truy xuất] class định danh [:lớp cơ sở]
{
thân lớp
}
Ví dụ Khai báo một lớp
public class Tester
{
public static int Main( )
{
...
}
}
Khi khai báo một lớp ta định nghĩa các đặc tính chung của tất cả các đối tượng
của lớp và các hành vi của chúng.

Ví dụ Khai báo, tạo và sử dựng một lớp:
using System;
public class Time
{
// phương thức public
15


public void DisplayCurrentTime( )

{
Console.WriteLine( "stub for DisplayCurrentTime" );
}
// các biến private
int Year; int Month; int Date;
int Hour; int Minute; int Second;
}
public class Tester
{
static void Main( )
{
Time t = new Time( );
t.DisplayCurrentTime( );
}
}
B, Phương thức
Các hành vi của một lớp được gọi là các phương thức thành viên (gọi tắt
là phương thức) của lớp đó. Một phương thức là một hàm (phương thức thành
viên còn gọi là hàm thành viên). Các phương thức định nghĩa những gì mà một
lớp có thể làm. Cách khai báo, nội dung và cách sử dụng các phương thức giống
hoàn toàn với Java và C++. Trong ví dụ trên có một phương thức đặc biệt là
phương thức Main() (như hàm main() trong C++) là phương thức bắt đầu của
một ứng dụng C#, có thể trả về kiểu void hay int. Mỗi một chương trình
(assembly) có thể có nhiều phương thức Main nhưng khi đó phải chỉ định
phương thức Main() nào sẽ bắt đầu chương trình.
16


Mỗi phương thức có thể không có tham số mà cũng có thể có nhiều
tham số. Các tham số theo sau tên phương thức và đặt trong cặp ngoặc đơn.

C, Tổng kết về ngôn ngữ C#
Bên trên là những vấn đề cơ bản nhất của ngôn ngữ C# và nền tảng .Net
Framework. Có thể tổng kết lại những đặc điểm và ưu điểm của ngôn ngữ này
như sau:
-

C# là ngôn ngữ đơn giản
C# là ngôn ngữ hiện đại
C# là ngôn ngữ hướng đối tượng
C# là ngôn ngữ mạnh mẽ và mềm dẻo
C# là ngôn ngữ có ít từ khóa
C# là ngôn ngữ hướng module
C# sẽ trở nên phổ biến
C# loại bỏ một vài sự phức tạp và rối rắm của những ngôn ngữ như Java

và c++, bao gồm việc loại bỏ những macro, những template, đa kế thừa, và lớp
cơ sở ảo (virtual base class). Chúng là những nguyên nhân gây ra sự nhầm lẫn
hay dẫn đến những vấn đề cho các người phát triển C++. Nếu chúng ta là người
học ngôn ngữ này đầu tiên thì chắc chắn là ta sẽ không trải qua những thời gian
để học nó! Nhưng khi đó ta sẽ không biết được hiệu quả của ngôn ngữ C# khi
loại bỏ những vấn đề trên.
Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng C và C++. Nếu chúng ta
thân thiện với C và C++ hoậc thậm chí là Java, chúng ta sẽ thấy C# khá giống về
diện mạo, cú pháp, biểu thức, toán tử và những chức năng khác được lấy trực tiếp
từ ngôn ngữ C và C++, nhưng nó đã được cải tiến để làm cho ngôn ngữ đơn giản
hơn. Một vài trong các sự cải tiến là loại bỏ các dư thừa, hay là thêm vào những
cú pháp thay đổi. Ví dụ như, trong C++ có ba toán tử làm việc với các thành viên
là ::, . , và ->. Để biết khi nào dùng ba toán tử này cũng phức tạp và dễ nhầm lẫn.
Trong C#, chúng được thay thế với một toán tử duy nhất gọi là . (dot). Đối với
người mới học thì điều này và những việc cải tiến khác làm bớt nhầm lẫn và đơn

giản hơn.
C# là ngôn ngữ hướng đối tượng:
17


Những đặc điểm chính của ngôn ngữ hướng đối tượng (Object-oriented
language) là sự đóng gói (encapsulation), sự kế thừa (inheritance), và đa hình
(polymorphism). C# hỗ trợ tất cả những đặc tính trên
C# là ngôn ngữ mạnh mẽ và cũng mềm dẻo:
Như đã đề cập trước, Ngôn ngữ C# chỉ bị giới hạn ở chính bởi bản thân
hay là trí tưởng tượng của người lập trình. Ngôn ngữ này không đặt những ràng
buộc lên những việc có thể làm. C# được sử dụng cho nhiều các dự án khác nhau
như là tạo ra ứng dụng xử lý văn bản, ứng dụng đồ họa, bản tính, hay thậm chí
những trình biên dịch cho các ngôn ngữ khác.
C# là ngôn ngữ ít từ khóa:
C# là ngôn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa
được sử dụng để mô tả thông tin. Chúng ta có thể nghĩ rằng một ngôn ngữ có
nhiều từ khóa thì sẽ mạnh hơn. Điều này không phải sự thật, ít nhất là trong
trường hợp ngôn ngữ C#, chúng ta có thể tìm thấy rằng ngôn ngữ này có thể
được sử dụng để làm bất cứ nhiệm vụ nào.
C# là ngôn ngữ hướng module:
Mã nguồn C# có thể được viết trong những phần được gọi là những lớp,
những lớp này chứa các phương thức thành viên của nó. Những lớp và những
phương thức có thể được sử dụng lại trong ứng dụng hay các chương trình khác.
Bằng cách truyền các mẫu thông tin đến những lớp hay phương thức có thể tạo ra
những mã nguồn dùng lại có hiệu quả.
C# sẽ là một ngôn ngữ phổ biến:
C# là một trong những ngôn ngữ lập trình mới nhất và phổ biến vì tính
đơn giản, hướng đối tượng, mạnh mẽ…
Ngôn ngữ C# và những ngôn ngữ khác:

Có nhiều ngôn ngữ khác như Visual Basic, C++ và Java. Vậy sự khác biệt
của C# và những ngôn ngữ đó là gì? Và tại sao lại chọn ngôn ngữ này để học mà
18


không chọn một trong những ngôn ngữ kia. Có rất nhiều lý do, và dưới đây là
một số lý do:
Microsoft nói rằng C# mang đến sức mạnh của ngôn ngữ C++ với sự dễ
dàng của ngôn ngữ Visual Basic. Có thể nó không dễ như Visual Basic, nhưng
với phiên bản Visual Basic.NET (Version 7) thì ngang nhau. Bởi vì chúng được
viết lại từ một nền tảng. Chúng ta có thể viết nhiều chương trình với ít mã nguồn
hơn nếu dùng C#.
Mặc dù C# loại bỏ một vài các đặc tính của C++, nhưng bù lại nó tránh
được những lỗi mà thường gặp trong ngôn ngữ C++. Điều này có thể tiết kiệm
được hàng giờ hay thậm chí hàng ngày trong việc hoàn tất một chương trình
Một điều quan trọng khác với C++ là mã nguồn C# không đòi hỏi phải có
tập tin header. Tất cả mã nguồn được viết trong khai báo một lớp.
Như đã nói ở bên trên. .NET runtime trong C# thực hiện việc thu gom bộ
nhớ tự động. Do điều này nên việc sử dụng con trỏ trong C# ít quan trọng hơn
trong C++. Những con trỏ cũng có thể được sử dụng trong C#, khi đó những
đoạn mã nguồn này sẽ được đánh dấu là không an toàn (unsafe code).
C# cũng từ bỏ ý tưởng đa kế thừa như trong C++. Và sự khác nhau khác là
C# đưa thêm thuộc tính vào trong một lớp giống như trong Visual Basic. Và
những thành viên của lớp được gọi duy nhất bằng toán tử “.” khác với C++ có
nhiều cách gọi trong các tình huống khác nhau.
Điểm giống nhau C# và Java là cả hai cùng biên dịch ra mã trung gian: C#
biên dịch ra MSIL còn Java biên dịch ra bytecode. Sau đó chúng được thực hiện
bằng cách thông dịch hoặc biên dịch just-in-time trong từng máy ảo tương ứng.
Tuy nhiên, trong ngôn ngữ C# nhiều hỗ trợ được đưa ra để biên dịch mã ngôn
ngữ trung gian sang mã máy. C# chứa nhiều kiểu dữ liệu cơ bản hơn Java và

cũng cho phép nhiều sự mở rộng với kiểu dữ liệu giá trị. Ví dụ, ngôn ngữ C# hỗ
trợ kiểu liệt kệ (enumerator), kiểu này được giới hạn đến một tập hằng được định
nghĩa trước, và kiểu dữ liệu cấu trúc đây là kiểu dữ liệu giá trị do người dùng
định nghĩa. Tương tự như Java, C# cũng từ bỏ tính đa kế thừa trong một lớp, tuy
19


nhiên mô hình kế thừa đơn này được mở rộng bởi tính đa kế thừa nhiều giao
diện.
Chính vì những ưu điểm trên mà ngôn ngữ C# được chọn để thực hiện
ứng dụng trong đề tài này.
1.3.4 SQL Server 2008
Microsoft SQl server là một hệ quản trị cơ sở dữ liệu quan hệ (relational
database management system – RDBMS) do Microsoft phát triển. SQL Server là
một hệ quản trị cơ sở dữ liệu quan hệ mạng máy tính hoạt động theo mô hình
khách chủ cho phép đồng thời cùng lúc có nhiều người dùng truy xuất đến dữ
liệu, quản lý việc truy nhập hợp lệ và các quyền hạn của từng người dùng trên
mạng. Ngôn ngữ truy vấn quan trọng của Microsoft SQL server là Transact-SQL.
Transact-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO
(International Organization for Standardization) và ANSI (American National
Standards Institute) được sử dụng trong SQL
SQL có nhiều phiên bản, ở đây tôi xin nhấn mạnh một số phiên bản nổi
bật:
SQL Server 2005: SQL Server 2005, được phát hành vào tháng 11 năm
2005, là phiên bản tiếp theo của SQL Server 2000. SQL Server 2005 tập trung
vào khả năng xử lý giao dịch trực tuyến trên diện rộng OLTP ( large-scale online
transactional processing), ứng dụng thương mại điện tử (e-commerce
applications) và kho dữ liệu (data warehousing). Ngoài ra, những cải tiến quan
trọng trong SQL Server 2005 là thêm các dịch vụ mới như: dịch vụ báo cáo
Reporting Services, Service Broker và sự thay đổi đáng kể trong Database

Engine.
SQL Server 2008: Đây là phiên bản mới nhất của SQl Server, có tên mã là
“katmai”. Ngày 27/02/2008 , Microsoft tổ chức một sự kiện có tên Heroes
Happen Here nhằm giới thiệu sản phẩm mới SQL Server 2008 (cùng với những
sản phẩm khác như Windows Server 2008; Visual Studio 2008).
Microsoft SQL server 2008 có những điểm mới, tiến bộ sau:

20


-

Một trong điểm nổi bật khi xem xét về SQL Server 2008 của Microsoft là
tính năng phân loại biệt ngữ mới và các lợi ích vào trong nhóm hoặc các
vùng chính. Có bốn vùng chính đó là Enterprise Data Platform, Dynamic

-

Development, Beyond Relational Database, và Pervasive Insight.
SQL Server 2008 có tác dụng đòn bẩy cho công nghệ .NET 3.0 (Dot Net
Framework 3.0) với LINQ (Language Integrated Query – ngôn ngữ truy
vấn tích hợp). Thêm vào đó là sự hỗ trợ hiệu quả hơn cho các thực thể dữ

-

liệu doanh nghiệp cùng với các tùy chọn đồng bộ dữ liệu.
Mã hóa dữ liệu: trong suốt cho phép toàn bộ cơ sở dữ liệu, các bảng và dữ
liệu có thể được mã hóa mà không cần phải lập trình ứng dụng. Trong
SQL Server 2008, toàn bộ cơ sở dữ liệu đều có thể được mã hóa bằng
SQL Engine. Phương pháp này mã hóa tất cả dữ liệu và các file bản ghi

cho cơ sở dữ liệu. Bằng sử dụng phương pháp này, tất cả các chỉ mục và

-

bảng cũng được mã hóa.
Tính năng mã hóa tiếp theo là Backup Encryption. SQL Server 2008 có
một phương pháp mã hóa các backup dùng để tránh lộ và can thiệp của
người khác vào dữ liệu. Thêm vào đó, việc phục hồi backup có thể được

-

hạn chế với từng người dùng cụ thể.
Cuối cùng, có một số tùy chọn mới cho External Key Management. Nếu
bạn có dính dáng tới việc xử lý thẻ tín dụng hoặc PCI (thẻ trả trước), thì
SQL Server 2008 sẽ hỗ trợ Hardware Security Modules (HSM) – mô đun
bảo mật phần cứng. Các mô đun này là giải pháp phần cứng của nhóm thứ
ba được sử dụng để lưu các Key ở một địa điểm phân biệt với dữ liệu mà

-

chúng bảo vệ.
Backup có thể được mã hóa để ngăn chặn việc lộ và thay đổi dữ liệu. Sự
thay đổi và truy cập dữ liệu có thể được thẩm định Thêm vào việc thẩm
định chuẩn cho logon / logoff và các thay đổi được phép, SQL Server

-

2008 cho phép kiểm tra sự thay đổi hay truy cập dữ liệu.
Fact Tables có thể được nén với hiệu suất cao.. SQL Server Data
Compression đã thực sự thực hiện được mục tiêu chính là giảm kích thước

của Fact Table. Vì vậy liên quan với việc lưu trữ trên các ổ đĩa cứng, với
các file vật lý nhỏ hơn, số lần backup được giảm
21


-

Tài nguyên chủ có thể được bảo đảm an toàn. Quản lý tài nguyên Resource Governor - trong SQL Server 2008 cũng là một điểm mới.
Governor được sử dụng để hạn chế người dùng hoặc nhóm người dùng chi
phối các lớp tài nguyên mức cao. Điểm mới trong SQL Server 2008 phải
kể đến nữa là Performance Studio. Studio là một trong các công cụ hiệu
suất. Cùng với đó chúng có thể được sử dụng cho việc kiểm tra, xử lý sự
cố, điều chỉnh và báo cáo. Thành phần Data Collector của Studio có thể
cấu hình. Nó hỗ trợ một số phương pháp chọn gồm có các truy vấn TSQL,
SQL Trace, và Perfmon Counters. Dữ liệu cũng có thể được chọn bằng lập

-

trình. Khi dữ liệu được chọn, có các tùy chọn báo cáo chung.
SQL 2008 hỗ trợ Hot Plug CPU. trong SQL Server 2008, các CPU cắm

-

thêm có thể được bổ sung vào nếu phần cứng của hệ thống hỗ trợ nó
Bộ đếm hiệu suất được mở rộng. Số bộ đếm hiệu suất trong SQL Server
2008 đã được mở rộng hơn so với phiên bản trước đó. IO và các bộ đếm
hiệu suất bộ nhớ là một cặp có thể được chọn để kiểm tra hiệu suất. Dữ
liệu đã được chọn bằng bộ đếm sẽ được lưu trong trung tâm lưu dữ liệu
tập trung. Microsoft phát biểu rằng việc chạy thiết lập hiệu suất mặc định
liên quan đến các kiểm tra sẽ tốn ít hơn 5% tài nguyên bộ nhớ và CPU.Có

một công cụ Performance Dashboard có thể đọc dữ liệu hiệu suất đã được

-

lưu.
Việc cài đặt đã được đơn giản hóa. Bộ đặt SQL Server 2008 cũng có nhiều
nâng cao. Dữ liệu cấu hình và các bit “engine” được tách biệt vì vậy nó có
thể tạo một đĩa hệ thống không cấu hình cơ bản phân phối đến một số máy
chủ dễ dàng hơn. Cài đặt có thể cập nhật được các nâng cấp mới nhất từ
website Microsoft. Tính năng khác là khả năng cài đặt SQL Server, gói
dịch vụ và các bản vá. Đi cùng với tính năng này là khả năng gỡ bỏ cài đặt
các gói dịch vụ một cách dễ dàng.

22


CHƯƠNG 2: TÌM HIỂU VỀ TRÌNH THU THẬP WEB
2.1 CÁCH XÂY DỰNG MỘT HẠ TẦNG THU THẬP
Hình bên dưới cho ta thấy một chu trình của một trình thu thập web cơ bản

Ảnh 2.1: Một vòng thu thập web cơ bản
Trình thu thập chứa một danh sách các URL chưa được thăm gọi là biên giới
(frontier). Danh sách được khởi tạo bởi một số các URL hạt giống – các URL
này được cung cấp bởi một người dùng hoặc một chương trình khác. Mỗi vòng
lặp là một quá trình gồm các bước :
-

Lấy một URL tiếp theo từ frontier ra để thu thập.
Lấy trang tương ứng với URL thông qua HTTP.
23



-

Bóc tách trang vừa lấy để trích xuất ra các URL và các nội dung thông tin

-

cụ thể.
Cuối cùng là thêm các URL chưa thăm vào frontier.

Trước khi các URL được thêm vào frontier chúng có thể được đánh chỉ mục
dựa trên số lượng truy cập vào trang web ứng với URL. Quá trình thu thập sẽ
chấm dứt ngay khi trình thu thập đạt đủ số lượng trang nhất định hoặc frontier
rỗng, đây được gọi là trạng thái kết thúc (dead-end) của trình thu thập.
2.1.1 Frontier
Frontier là một danh sách chứa các URL của các trang chưa thăm. Trong
thuật ngữ tìm kiếm đồ thị, frontier là một danh sách mở các đỉnh chưa được mở
rộng. Đối với một trình thu thập lớn frontier có thể chứa hàng chục ngàn đến
hàng trăm ngàn trang và phải lưu trữ trong ổ cứng. Tuy vậy frontier nào cũng có
một miền giới hạn nhất định, miền giới hạn này lớn hay nhỏ phụ thuộc vào bộ
nhớ của máy tính. Khi số lượng URL thu thập được vượt quá giới hạn này chúng
ta sẽ cần một cơ chế để loại bỏ các URL ứng với các trang ít quan trọng và giữ
lại các URL ứng với các trang quan trọng. Lưu ý rằng tốc độ thêm các URL vào
frontier nhanh gần bằng tốc độ thu thập thông tin. Nó có thể thêm tới 60000 URL
ngay khi trình thu thập thu thập dữ liệu của 10000 trang, giả định trung bình mỗi
trang có khoảng 7 liên kết.
Frontier có thể coi như một hàng đợi làm việc theo cơ chế FIFO (viết tắt
của First In First Out) nghĩa là vào trước ra trước trong trường hợp chúng ta sử
dụng thuật toán tìm kiếm theo chiều rộng để thu thập thông tin. Trình thu thập sử

dụng chiến thuật tìm kiếm này gọi là trình thu thập theo chiều rộng. Các URL
được lấy ra thu thập được chọn từ trên xuống dưới trong danh sách và các URL
mới được thêm vào đuôi của danh sách. Do miền giới hạn của frontier, ta phải
đảm bảo các URL chỉ được lấy một lần. Để tìm kiếm xem một URL mới được
trích xuất đã có trong danh sách chưa là khá phức tạp vì số lượng trang là rất lớn
mỗi lần tìm kiếm là một lần chạy vòng for điều này là khá bất cập. Vì vậy có một
giải pháp là sử dụng một phần bộ nhớ để duy trì một hàm băm với URL là khóa.
Hàm băm này sẽ sinh ra các giá trị băm tương ứng với mỗi URL. Sở dĩ sử dụng
24


hàm băm sẽ tìm kiếm nhanh hơn vì việc so sánh các giá trị băm nhanh hơn nhiều
việc so sánh một giá trị với một khối dữ liệu lớn.
Hiện nay do bộ nhớ máy tính là rất lớn nên vấn đề về bộ nhớ là không
mấy quan trọng so với vấn đề về tốc độ. Do vậy, cách sử dụng hàm băm được sử
dụng rộng rãi vì tuy là tốn bộ nhớ hơn nhưng tốc độ tìm kiếm lại được cải thiện
đáng kể.
Khi frontier đạt đến miền giới hạn, thì các trình thu thập theo chiều rộng
sẽ làm việc theo cơ chế sau : sau khi đưa một URL ra khỏi frontier để tiến hành
quá trình thu thập trang tương ứng thay vì việc lấy tất cả URL trong trang này
trình thu thập sẽ chỉ lấy URL chưa thăm đầu tiên và thêm vào frontier.
Frontier có thể coi như một hàng đợi ưu tiên trong trường hợp chúng ta sử
dụng thuật toán tìm kiếm theo lựa chọn tốt nhất. Trình thu thập sử dụng chiến
thuật tìm kiếm này gọi là trình thu thập ưu tiên. Hàng đợi ưu tiên là một mảng
với các phần tử là các URL được sắp xếp theo điểm đánh giá. Điểm đánh giá này
được xác định dựa trên một số các phương pháp dựa trên kinh nghiệm (heuristic).
Trình thu thập ưu tiên sẽ làm việc theo cơ chế sau: URL được lấy ra khỏi frontier
để tiến hành thu thập luôn là URL tốt nhất. Sau khi thu thập trang tương ứng, các
URL được trích xuất ra được đưa vào frontier và các danh sách URL được sắp
xếp lại theo điểm đánh giá. Để tránh việc trùng lặp URL chúng ta cũng duy trì

một hàm băm với các khóa là URL để tra cứu.
Khi frontier đạt đến miền giới hạn, cơ chế làm việc của trình thu thập tối
ưu cũng giống với trình thu thập theo chiều rộng chỉ khác là các URL được lấy là
các URL tốt nhất (tức là URL có điểm đánh giá cao nhất).
Trong trường hợp trình thu thập nhận thấy frontier là danh sách rỗng
(không thể lấy ra các URL tiếp theo để thu thập) thì quá trình thu thập sẽ kết
thúc. Tuy vậy trường hợp rất hiếm xảy ra vì với một số URL hạt giống và miền
giới hạn khá lớn frontier hiếm khi đạt trạng thái rỗng.
Nhiều khi một trình thu thập có thể bắt gặp một bẫy nhện (spider trap) dẫn
nó đến một lượng lớn các URL khác nhau nhưng trỏ đến cùng một trang web.
25


×