Tài liệu Khóa luận Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin: Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
I
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Minh Phúc
TÌM HIỂU VỀ WEB CRAWLER VÀ XÂY DỰNG
WEBSITE TỔNG HỢP THÔNG TIN
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
HÀ NỘI - 2010
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
II
HÀ NỘI - 20
(chữ hoa, 12pt, đậm, căn giữa)
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 Hoàng Xuân Huấn, thuộc
bộ môn Khoa học máy tính, khoa Công nghệ thông tin, trường Đại học Công Nghệ,
ĐHQGHN. Trong quá trình thực hiện khóa luận, 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 khóa luậ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 nói riêng và
trong khoa Công nghệ thông tin nói chung đã 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...
61 trang |
Chia sẻ: haohao | Lượt xem: 1450 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
I
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Minh Phúc
TÌM HIỂU VỀ WEB CRAWLER VÀ XÂY DỰNG
WEBSITE TỔNG HỢP THÔNG TIN
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
HÀ NỘI - 2010
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
II
HÀ NỘI - 20
(chữ hoa, 12pt, đậm, căn giữa)
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 Hoàng Xuân Huấn, thuộc
bộ môn Khoa học máy tính, khoa Công nghệ thông tin, trường Đại học Công Nghệ,
ĐHQGHN. Trong quá trình thực hiện khóa luận, 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 khóa luậ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 nói riêng và
trong khoa Công nghệ thông tin nói chung đã 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 khóa luận này.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
III
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 khóa luận đặ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ừ trang
báo điện tử lớn là trang Dân trí ( Ứng dụng được viết bằng ngôn
ngữ lập trình PHP tương tác với cơ sở dữ liệu mySQL và được xây dựng 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.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
IV
MỤC LỤC
MỞ ĐẦU ........................................................................................................1
CHƯƠNG 1. TÌM HIỂU VỀ TRÌNH THU THẬP WEB................................3
1.1. GIỚI THIỆU VỀ TRÌNH THU THẬP WEB ............................................3
1.2. CÁCH XÂY DỰNG MỘT HẠ TẦNG THU THẬP .................................4
1.2.1. Frontier..............................................................................................6
1.2.2. Lược sử và kho lưu trữ trang ..............................................................7
1.2.3. Cách lấy trang ....................................................................................8
1.2.3.1. Tiêu chuẩn loại trừ robot ..............................................................9
1.2.4. Bóc tách trang ..................................................................................10
1.2.4.1. Tiêu chuẩn trích xuất URL .........................................................11
1.2.4.2. Mô hình thẻ HTML dạng cây .....................................................12
1.2.5. Trình thu thập đa luồng ....................................................................13
1.3. CÁC CHIẾN LƯỢC THU THẬP DỮ LIỆU...........................................15
1.3.1. Chiến lược thu thập dữ liệu theo chiều sâu .......................................16
1.3.2. Chiến lược thu thập dữ liệu theo chiều rộng......................................16
1.3.3. Chiến lược thu thập dữ liệu theo ngẫu nhiên.....................................17
1.3.4. Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ. ............17
1.4. ĐÁNH GIÁ CỦA TRÌNH THU THẬP...................................................19
1.4.1. Độ quan trọng của trang web ............................................................20
1.4.2. Phân tích tổng quát ...........................................................................21
1.4.2.1. Thước đo độ chính xác...............................................................22
1.4.2.2. Thước đo độ hoàn chỉnh.............................................................22
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
V
CHƯƠNG 2. XÂY DỰNG WEBSITE TỔNG HỢP THÔNG TIN...............25
2.1. CÁC KIẾN THỨC NỀN TẢNG .............................................................25
2.1.1. Mạng toàn cầu ..................................................................................25
2.1.2. Giao thức truyền tải siêu văn bản......................................................28
2.1.3. Ngôn ngữ đánh dấu siêu văn bản ......................................................28
2.2. CÁC CÔNG NGHỆ LIÊN QUAN .........................................................30
2.2.1. Ngôn ngữ lập trình PHP ...................................................................30
2.2.1.1. Biểu thức chính quy ...................................................................31
2.2.1.2. Các hàm xử lý chuỗi ..................................................................34
2.2.1.2.1. Tìm kiếm chuỗi trong chuỗi.................................................34
2.2.1.2.2. Tìm vị trí của chuỗi con.......................................................34
2.2.1.2.3. Hàm so sánh chuỗi...............................................................34
2.2.1.2.4. Kiểm tra chiều dài của chuỗi ...............................................35
2.2.2. MySQL ............................................................................................35
2.2.3. Một số công nghệ và tiện ích khác ....................................................37
2.2.3.1. Add-ons firebug của firefox .......................................................37
2.2.3.2. Ajax ...........................................................................................37
2.3. PHÂN TÍCH ...........................................................................................38
2.3.1. Cấu trúc bài viết trong trang báo điện tử ...........................................38
2.3.2. Các cách thu thập bài viết .................................................................42
2.3.2.1. Cách làm truyền thống ...............................................................42
2.3.2.1.1. Các bước thực hiện ..............................................................42
2.3.2.1.2. Nhận xét ..............................................................................44
2.3.2.2. Cách làm mới.............................................................................45
2.3.2.2.1. Các bước thực hiện ..............................................................45
2.3.2.2.2. Nhận xét ..............................................................................46
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
VI
2.4. THIẾT KẾ ..............................................................................................47
2.4.1. Cấu trúc cơ sở dữ liệu.......................................................................47
2.4.1.1. Danh sách các bảng....................................................................47
2.4.1.2. Chi tiết các bảng ........................................................................47
2.4.2. Phần quản trị cơ sở dữ liệu ...............................................................49
2.4.3. Phần giao diện chính trang web ........................................................50
CHƯƠNG 3: KẾT LUẬN ..............................................................................50
3.1. CÁC KẾT QUẢ ĐÃ ĐẠT ĐƯỢC ..........................................................51
3.2. HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI ...................................................51
TÀI LIỆU THAM KHẢO...............................................................................53
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
VII
BẢNG DANH MỤC CÁC HÌNH MINH HỌA
Hình 1: Một vòng thu thập web cơ bản................................................................5
Hình 2: Mô hinh cây tương ứng với một mã nguồn HTML ...............................12
Hình 3: Một mô hình trình thu thập đa luồng.....................................................14
Hình 4: Hình minh họa về độ hoàn chỉnh và độ chính xác .................................21
Hình 5: Hình mình họa thu hồi mục tiêu............................................................23
Hình 6: So sánh giữa thuật toán breadth-first và naive best-first ........................24
Hình 7: World wide web ...................................................................................26
Hình 8. Tương tác client và server .....................................................................28
Hình 9: Add-ons firebug của trình duyệt firefox ................................................37
Hình 10: Cấu trúc phần bài viết .........................................................................39
Hình 11: Cấu trúc phần chuyên mục..................................................................40
Hình 12: Cấu trúc phần trang chủ ......................................................................41
Hình 13: Giao diện phần quản trị cơ sở dữ liệu..................................................49
Hình 14: Giao diện của trang web tổng hợp thông tin ........................................50
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
VIII
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
1
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 khóa luận đặ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ừ các
trang báo điện tử lớn. Đề tài nếu thành công 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, giống
như google, cho người Việt Nam.
Nội dung của khóa luậ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 (web crawler)
- Xây dựng một ứng dụng website tổng hợp thông tin có khả năng thu thập các
bản tin từ các trang báo lớn như Dân trí.
Để giải quyết được các mục tiêu này, khóa luận được chia thành ba chương lớn:
Chương 1: Tìm hiểu về trình thu thập web
Trong chương này, chúng ta sẽ lần lượt 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 bức tranh chung
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
2
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 2: 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 công nghệ liên
quan, ở 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 và thiết kế giao diện website. Cũng trong phần
này tôi sẽ nêu ra hai cách thu thập thông tin. Một là cách làm phổ biến hiện nay tôi gọi
là cách làm truyền thống, một là cách làm mới tôi tìm ra. Cách làm mới này tối ưu hơn
và có thể giải quyết được các hạn chế trong cách làm truyền thống.
Chương 3: Kết luận
Phần kết luận cũng là phần cuối của khóa luận sẽ nhìn lại những điều đã làm
được trong khóa luận này, nêu lên những vấn đề còn vướng mắc, từ đó đề ra hướng
phát triển tiếp theo cho đề tài.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
3
CHƯƠNG 1. TÌM HIỂU VỀ TRÌNH THU THẬP WEB
1.1. 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 [1]. 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 trang HTML, bóc tách nội dung trang HTML
vv... Ở phần sau của khóa luậ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.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
4
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 khóa luậ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 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.2. CÁCH XÂY DỰNG MỘT HẠ TẦNG THU THẬP
Hình 1 cho ta thấy một chu trình của một trình thu thập web cơ bản [1]
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
5
Hình 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.
- 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.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
6
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.
1.2.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, [6]) 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 [5]. 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 [8]. 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 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
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
7
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 [5]. 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, [3]) 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. Một
cách để giảm bớt vấn đề này là hạn chế số lượng trang mà các trình thu thập truy cập
từ một tên miền nhất định. Các mã liên kết với frontier có thể đảm bảo rằng trong một
chuỗi liên tiếp các URL (khoảng 100 URL) trong frontier sẽ chỉ chứa một URL từ một
tên miền máy chủ (ví dụ như www.cnn.com). Như vậy trình thu thập sẽ tốt hơn bởi
không truy cập vào cùng một trang quá thường xuyên và các trang được thu thập cũng
có xu hướng đa dạng hơn.
1.2.2. Lược sử và kho lưu trữ trang
Lược sử thu thập dữ liệu [1] là một danh sách đánh dấu theo thời gian các URL
được lấy bởi trình thu thập. Một URL được đưa vào lược sử chỉ sau khi đã trả về các
URL bên trong nó. Lược sử có thể sử dụng để phân tích và đánh giá thông tin. Lược sử
được lưu trữ nhằm cung cấp cho một tra cứu nhanh để kiểm tra xem một trang đã được
thăm hay chưa. Kiểm tra này là khá quan trọng nhằm tránh các trang bị thăm lại và
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
8
tránh thêm việc thu thập lại các trang này. Do kích thước của frontier có hạn và bộ nhớ
của máy tính hiện nay là vô cùng lớn nên việc duy trì một lược sử cần thiết nhằm nâng
cao hiệu quả hoạt động của trình thu thập. Một điều cần chú ý là phải chuẩn hóa URL
trước khi đưa vào lược sử.
Khi một trang được lấy nó phải được lưu trữ và lập chỉ mục nhằm mục đích phục
vụ cho các ứng dụng sau này (chẳng hạn như công cụ tìm kiếm). Đây là công việc mà
một kho lưu trữ trang phải làm. Một kho lưu trữ trang ở dạng đơn giản sẽ chứa các
trang thu thập theo từng file riêng biệt. Trong trường hợp đó, mỗi trang phải đặt trong
một tệp tin duy nhất. Một cách để làm điều này là đặt mỗi trang URL tương ứng với
một chuỗi sau đó sử dụng một vài dạng của hàm băm với xác suất xung đột thấp để mã
hóa. Giá trị kết quả của hàm băm được sử dụng làm tên của tập tin. Ví dụ ta có thể sử
dụng hàm băm MD5 [8] cung cấp một mã băm 128 bit cho mỗi URL. Giá trị băm 128
bit sau đó được chuyển đổi sang hệ thập lục phân (hecxa) 32 ký tự để lấy ra tên file. Ví
dụ nội dung của được lưu trữ trong một tập tin tên là
160766577426e1d01fcb7735091ec584. Bằng cách này chúng ta có độ dài tên tập tin
luôn cố định cho dù có bao nhiều URL đi nữa. Tất nhiên nếu chỉ cần lưu trữ vài nghìn
trang thì ta có thể sử dụng một hàm băm đơn giản hơn. Trong một số trường hợp các
kho lưu trữ trang cũng có thể dùng để kiểm tra xem một URL đã được thu thập hay
chưa trước khi chuyển đổi sang tên tập tin 32 ký tự. Trong những trường hợp này có
thể bỏ đi cấu trúc dữ liệu lược sử.
1.2.3. Cách lấy trang
Để lấy một trang web, chúng ta cần một máy khách HTTP (HTTP client) gửi một
yêu cầu HTTP (HTTP request) cho trang đó và đọc các phản hồi [4]. Client cần có thời
gian trễ để đảm bảo rằng không bị mất thời gian không cần thiết vào các máy chủ
chậm hoặc đọc các trang lớn. Trong thực tế chúng ta thường hạn chế vấn đề này bằng
cách cho client tải về khoảng 10-20 KB đầu tiên của trang. Client cần bóc tách được
tiêu đề phản hồi cho các mã trạng thái và chuyển hướng. Kiểm tra lỗi và xử lý ngoài
luồng là rất quan trọng trong quá trình lấy trang vì chúng ta phải đối phó với hàng triệu
máy chủ. Trong quá trình lấy trang, trình thu thập không thể tự quyết định tài liệu nào
được lập chỉ mục và tài liệu nào không, do đó nó lấy tất cả những gì có thể. Thậm chí
dù xác định được tài liệu vô ích thì nó cũng đã bỏ ra một chi phí đáng kể cho hoạt
động thu thập. Tiêu chuẩn loại trừ robot (Robot Exclusion Protocol, [12]) ra đời.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
9
1.2.3.1. Tiêu chuẩn loại trừ robot
Tiêu chuẩn này cung cấp cho người quản trị Web (Webmaster) một cơ chế xác
định các tập tin mà không cần truy cập bằng trình thu thập. Để làm được điều này,
trình thu thập (robot) duy trì một tập tin có tên là robot.txt [12] trong thư mục gốc của
các máy chủ web (ví dụ như . Tệp tin này chứa
hoàn toàn nội dung văn bản text (không phải HTML). Robot.txt cho phép Webmaster
định ra các thành phần với quyền hạn riêng biệt cho từng robot. Nói cách khác thông
qua tệp tin này, Webmaster sẽ giao tiếp với robot để điều khiển tác vụ của các robot
này. Nó gồm 2 trường là trường User-agent và trường Disallow:
- Trường User-agent: cho biết robot nào sẽ bị kiểm soát.
- Trường Disallow: cho biết robot có được phép kết nối vào URL hay không.
Sau đây là các ví dụ minh họa việc sử dụng file robot.txt [12]:
Cú pháp Ghi chú cho Webmaster
User-agent:*
Disallow:
Dấu (*) có nghĩa là áp dụng cho mọi robot.
Nhưng vì không có tài nguyên nào bị cấm nên tất cả
mọi thư mục đều được cho phép.
User-agent:*
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /private/
Tất cả mọi robot đều có quyền truy cập tất cả các
thư mục trừ ba thư mục được trích dẫn phía sau.
User-agent:
SpamBot
Disallow: /
Trường hợp này robot SpamBot bị cấm truy cập
tất cả thư mục. Dấu gạch chéo “/” có nghĩa là tất cả
các thư mục. User-Agent có thể là ký tự đơn và các
robot không phần biệt chữ hoa và chữ thường.
User-agent:
SpamBot
Disallow:/
User-agent:*
SpamBot bị cấm truy cập tất cả tài nguyên.
Trong khi các robot khác được được truy cập tất cả trừ
thư mục “private”.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
10
Nhược điểm của file robot.txt :
Người ta cho rằng việc liệt kê các trang hoặc các thư mục trong file robot.txt sẽ
là nguyên nhân thu hút sự chú ý và trở thành mục tiêu cho các hacker. Thực ra chuẩn
loại trừ robot chỉ là dấu hiệu cảnh báo, không phải là biện pháp cấm robot cho nên
việc tuân theo hay không hoàn toàn là vấn đề tự nguyện. Tuy nhiên vẫn có cách khắc
phục:
Tạo một thư mục chứa tất cả các file quan trọng.
- Trường Disallow chỉ liệt kê tên thư mục vừa tạo.
- Cấu hình server sao cho các trang không chứa đường dẫn đến thư mục này.
Đáng buồn trên thực tế cách này không đạt được kết quả mong đợi do một trong
các nguyên nhân sau :
- Các server có robot không bị cấm có thể dẫn đường các robot bị cấm khác
đến những file này.
- Các file quan trọng có thể nằm trong log file (file được tự do truy xuất).
- Khi cấu hình lại server, admin có thể ‘quên‘ các thư mục này phải cấm
robot!
1.2.4. Bóc tách trang
Khi một trang đã được lấy, chúng ta cần phân tích nội dung của nó để trích xuất
thông tin, lấy ra các URL để mở ra hướng đi tiếp theo của các trình thu thập. Phân tích
Disallow: /private/
User-agent:
SpamBot
Disallow: /tmp/
Disallow: /private/
Disallow:
/tailieu/canhan.html
User-agent: *
Disallow: /tmp/
Disallow: /private/
Không cho phép SpamBot dò các thư mục được
liệt kê phía sau : thư mục “tmp”, “private” và tệp tin
“canhan.html” trong thư mục “tailieu”.
Các robot tìm kiếm khác được dò mọi thứ trừ hai thư
mục “tmp” và “private”.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
11
nội dung có thể là quá trình khai thác hyperlink/URL đơn giản hoặc nó có thể bao gồm
quá trình phức tạp hơn như lọc nội dung HTML để phân tích thành mô hình thẻ
HTML dạng cây (HTML tag tree). Phân tích nội dung cũng có thể bao gồm các bước
chuyển đổi URL được trích xuất thành dạng tiêu chuẩn, loại bỏ những từ ở phần đầu
nội dung của trang và lấy các từ còn lại ở phần thân.
1.2.4.1. Tiêu chuẩn trích xuất URL
Hàm bóc tách HTML có sẵn cho nhiều ngôn ngữ khác nhau. Chúng cung cấp
các chức năng để dễ dàng xác định các tag HTML và cặp các giá trị thuộc tính liên
quan trong một tài liệu HTML. Để trích xuất siêu liên kết URL từ một Trang Web,
chúng ta có thể sử dụng các hàm bóc tách để tìm thẻ anchor (thẻ ) và lấy các giá trị
các thuộc tính href liên quan. Trước tiên chúng ta phải chuyển đổi tất cả các đường
dẫn URL sang đường dẫn URL tuyệt đối vì có nhiều đường dẫn URL viết không đúng
quy chuẩn có thể cùng dẫn tới một trang. Điều này là quan trọng để tránh lấy một trang
nhiều lần. Đây là một số bước điển hình được sử dụng trong thủ tục chuẩn hóa URL:
Chuyển đổi giao thức và tên máy chủ thành dạng chữ thường.
Ví dụ, chuyển đổi thành
Loại bỏ phần ‘tham khảo’ trong URL.
Ví dụ, chuyển đổi thành
Thực hiện mã hóa URL cho một vài những ký tự thường sử dụng như ’~’
Điều này sẽ tránh được việc thu thập lại 1 trang.
Ví dụ, và
%7Epant/ là 2 URL cùng dẫn đến một trang.
Đối với một vài URL, thêm ký tự ‘/’. Ví dụ, và
cùng nối tới một dạng chuẩn. Quyết định thêm
‘/’ sẽ cần heuristic trong nhiều trường hợp.
Sử dụng các heuristic để nhận ra các trang web mặc định. Những tên file như
index.html hoặc index.htm có thể được loại bỏ trong đường dẫn URL với thừa
nhận rằng đó là những trang mặc định.
Loại bỏ ’..’ và đường dẫn trước nó trong phần URL.
Ví dụ, đường dẫn /%7Epant/BizIntel/Seeds/../ODPSeeds.dat được chuyển
thành
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
12
/%7Epant/BizIntel/ODPSeeds.dat.
Điều quan trọng là đảm bảo tính nhất quán trong khi áp dụng các luật chuẩn hóa.
Có thể hai luật khác nhau lại cho kết quả tốt như nhau miễn là ta áp dụng các luật
chuẩn hóa URL một cách nhất quán. Trước đây có một vấn đề hóc búa đặt ra cho các
trình thu thập là bẫy nhện. Kỹ thuật phổ biến của bẫy nhện là tạo ra các cấu trúc đường
dẫn sau vô hạn.Ví dụ,
Các URL giả tạo ra bởi bẫy nhện tăng lên cực nhanh. Có một cách để ngăn chặn
là giới hạn kích thước URL cỡ 128 hoặc 256 ký tự.
1.2.4.2. Mô hình thẻ HTML dạng cây
Các trình thu thập có thể lấy ra giá trị của các URL hoặc một nội dung bất kỳ
trong một trang web bằng cách kiểm tra phạm vi thẻ tag HTML chứa chúng. Để làm
được điều này, trình thu thập có thể sử dụng mô hình thẻ HTML dạng cây và phân tích
cấu trúc DOM (Document Oject Model, [8]) của mô hình này. Phân tích cấu trúc
DOM giúp trình thu thập có thể duyệt các node trên cây này và chỉ lấy ra phần nội
dung mà nó cần. Hình 2 cho ta thấy một mô hình cây tương ứng với một mã nguồn
URL [1]
Hình 2: Mô hình cây tương ứng với một mã nguồn HTML
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
13
Có thể thấy thẻ là gốc của cây, các thẻ bên trong nó là các node mở rộng,
và dữ liệu text là lá của cây.
Trên thực tế, không phải văn bản HTML nào cũng được viết đúng quy chuẩn như
ví dụ trên. HTML là ngôn ngữ không phân biệt chữ hoa hay chữ thường (hai thẻ
và đều là một). Các phần tử HTML cần có một thẻ mở và một thẻ đóng, tuy
nhiên điều này không luôn luôn đúng, có nhiều phần tử không cần thẻ đóng, ví dụ các
thẻ , và . Ngoài ra khi lồng nhau, các phần tử HTML cũng không cần
thiết phải lồng nhau theo đúng thứ tự (tức là thẻ nào mở trước thì phải đóng sau). Ví
dụ sau là hợp lệ trong HTML:
Cộng hòa xã hội chủ nghĩa Việt Nam Độc lập tự do hạnh
phúc
Vì vậy trước khi lập mô hình cây cho một mã nguồn HTML chúng ta cần một
quá trình chuyển đổi các tài liệu HTML tồi thành các tài liệu HTML tiêu chuẩn, quá
trình này gọi là chuẩn hóa các trang HTML. Quá trình này bao gồm việc chuyển đổi
các thẻ sang dạng chữ thường, chèn thêm các thẻ bị và sắp xếp lại thứ tự các thẻ trong
tài liệu HTML. Chuẩn hóa trang HTML là rất cần thiết để việc lập mô hình cây được
chính xác. Nếu như trình thu thập chỉ cần lấy các liên kết hoặc văn bản hoặc một phần
văn bản thì có thể ta không cần sử dụng tới mô hình cây mà chỉ cần sử dụng kỹ thuật
bóc tách HTML đơn giản. Trình bóc tách như vậy cũng được hỗ trợ trong nhiều ngôn
ngữ lập trinh.
1.2.5. Trình thu thập đa luồng
Mỗi vòng thu thập tuần tự chiếm một lượng lớn thời gian, trong khi đó một
trong hai cái là CPU hoặc mạng lại nhàn rỗi: CPU nhàn rỗi (trong khi truy cập mạng)
hoặc mạng nhàn rỗi (trong các hoạt động của CPU). Việc xử lý đa luồng với mỗi
luồng là một vòng thu thập, có thể giúp cho việc tăng tốc độ hợp lý và sử dụng hiệu
quả băng thông sẵn có. Hình 3 chỉ ra một phiên bản đa luồng [1] của trình thu thập cơ
bản trong hình 1:
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
14
Hình 3: Một mô hình trình thu thập đa luồng
Mô hình đa luồng là mô hình làm việc gồm nhiều luồng trên cùng một frontier
với mỗi luồng là một vòng thu thập. Chính vì thế cần một cơ chế đồng bộ để tránh việc
xung đột khi các luồng cùng tiến hành quá trình thu thập trên một frontier. Cơ chế này
như sau:
- Luồng đầu tiên bắt đầu bằng cách khóa frontier để chọn URL tiếp theo cho
quá trình thu thập dữ liệu.
- Sau khi lấy ra một URL, nó sẽ mở khóa frontier cho phép các luồng tiếp
theo truy cập vào frontier.
- Frontier lại bị khóa lại để những URL mới được thêm vào.
Các bước khóa này là cần thiết để đồng bộ hóa việc sử dụng frontier khi mà
frontier bị chia sẻ bởi nhiều vòng thu thập. Chú ý rằng một trình thu thập thông thường
sẽ duy trì một cấu trúc dữ liệu lược sử phục vụ cho việc tra cứu nhanh các URL đã
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
15
được thu thập. Do đó ngoài các frontier thì việc đồng bộ hóa các truy cập vào lược sử
là điều cần thiết.
Các mô hình trình thu thập đa luồng cũng cần phải đối phó với các frontier rỗng
giống như một trình thu thập theo tuần tự. Tuy nhiên đây là vấn đề không đơn giản.
Nếu một luồng phát hiện ra frontier rỗng, nó không tự động hiểu là toàn bộ trình thu
thập đã đến trạng thái kết thúc. Nó có thể cho rằng các luồng khác đang lấy trang và có
thể thêm các URL mới trong tương lai gần. Một cách để giải quyết với tình trạng này
là đặt một luồng một trạng thái chờ khi frontier bị khóa. Khi hết thời gian chờ nó sẽ
kiểm tra lại frontier. Sẽ có một bộ kiểm tra chịu trách nhiệm theo dõi số luồng đang ở
trạng thái chờ tại thời điểm hiện tại. Chỉ khi tất cả các luồng đều trong trạng thái chờ
thì khi đó trình thu thập sẽ dừng lại.
1.3. CÁC CHIẾN LƯỢC THU THẬP DỮ LIỆU
Trong phần này chúng ta sẽ thảo luận về một số chiến lược thu thập dữ liệu [5]
bao gồm :
- Chiến lược thu thập dữ liệu theo chiều sâu.
- Chiến lược thu thập dữ liệu theo chiều rộng.
- Chiến lược thu thập dữ liệu theo ngẫu nhiên.
- Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ.
Như đã nói ở phần trước 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. Chính vì thế các chiến thuật thu thập dữ liệu
cũng được xây dựng dựa trên các thuật toán tìm kiếm trên đồ thị. Các thuật toán tìm
kiếm trên đồ thị bao gồm:
- Tìm kiếm theo chiều sâu (Depth-First Search): Là thuật toán tìm kiếm bằng
cách mở rộng nút đồ thị theo chiều sâu.
- Tìm kiếm theo chiều rộng (Breath-First Search): Là thuật toán tìm kiếm
bằng cách mở rộng nút đồ thị theo chiều rộng.
- Tìm kiếm theo lựa chọn tốt nhất (Best-First Search): Là một thuật toán tìm
kiếm tối ưu bằng cách mở rộng nút hứa hẹn nhất theo một quy tắc nào đó.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
16
1.3.1. Chiến lược thu thập dữ liệu theo chiều sâu
Quá trình thực hiện:
Bước 1: Lấy URL đầu tiên trong danh sách (frontier) để thu thập.
- Nếu có qua bước 2.
- Nếu không qua bước 5.
Bước 2: Lấy trang tương ứng với URL qua HTTP.
- Nếu có qua bước 3.
- Nếu không quay lại bước 1.
Bước 3: Kiểm tra xem trang này đã được được thăm chưa?
- Nếu chưa qua bước 4.
- Nếu rồi quay lại bước 1.
Bước 4: Đánh dấu trang này đã được thăm. Bóc tách trang và tìm các liên kết có
trong trang này.
- Nếu có, thêm các liên kết vào đầu danh sách. Quay lại bước 3.
- Nếu không, quay lại bước 1.
Bước 5: Kết thúc.
1.3.2. Chiến lược thu thập dữ liệu theo chiều rộng
Quá trình thực hiện:
Bước 1: Lấy URL đầu tiên trong danh sách để thu thập.
- Nếu có qua bước 2.
- Nếu không qua bước 5.
Bước 2: Lấy trang tương ứng với URL qua HTTP.
- Nếu có qua bước 3.
- Nếu không quay lại bước 1.
Bước 3: Kiểm tra xem trang này đã được được thăm chưa?
- Nếu chưa qua bước 4.
- Nếu rồi quay lại bước 1.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
17
Bước 4: Đánh dấu trang này đã được thăm. Bóc tách trang và tìm các liên kết có
trong trang này.
- Nếu có, thêm các liên kết vào cuối danh sách. Quay lại bước 3.
- Nếu không, quay lại bước 1.
Bước 5: Kết thúc.
1.3.3. Chiến lược thu thập dữ liệu theo ngẫu nhiên
Quá trình thực hiện:
Bước 1: Lấy URL ngẫu nhiên trong danh sách để thu thập.
- Nếu có qua bước 2.
- Nếu không qua bước 5.
Bước 2: Lấy trang tương ứng với URL qua HTTP.
- Nếu có qua bước 3.
- Nếu không quay lại bước 1.
Bước 3: Kiểm tra xem trang này đã được được thăm chưa?
- Nếu chưa qua bước 4.
- Nếu rồi quay lại bước 1.
Bước 4: Đánh dấu trang này đã được thăm. Bóc tách trang và tìm các liên kết có
trong trang này.
- Nếu có, thêm các liên kết vào cuối danh sách. Quay lại bước 3.
- Nếu không, quay lại bước 1.
Bước 5: Kết thúc.
1.3.4. Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ.
Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ (Naive Best-First,
[1]) sử dụng thuật toán tìm kiếm theo lựa chọn tốt nhất theo quy tắc tính điểm số cho
các URL. Điểm số của một URL được tính bằng phương pháp độ tương đồng cosin
(cosine similarity, [6]) của trang web tương ứng và truy vấn mà người dùng đưa ra. Độ
tương đồng cosin là phương pháp tính giá trị tương đồng giữa 2 vectơ n chiều bằng
cách tìm cosin góc giữa chúng, phương pháp độ tương đồng cosin thường được dùng
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
18
để so sánh một truy vấn với một trang văn bản. Độ tương đồng cosin của trang p và
truy vấn q được tính bằng công thức:
Độ tương đồng (p,q) = cos(vp,vq) =
vp*vq
||vp||*||vq||
Trong đó vp,vq là các vecto đại diện được tính dựa trên tần số phát sinh (term
frequency, [6]). Tần số phát sinh có thể hiểu là số lần xuất hiện của các từ truy vấn q
trong trang p.
vp*vq là tích vô hướng của 2 vectơ; ||v|| là giá trị độ dài Euclid của vectơ v.
Nếu độ tương đồng (p,q) = -1 tức là khác nhau tuyệt đối
Nếu độ tương đồng (p,q)= 0 tức là độc lập với nhau
Nếu độ tương đồng (p,q)= 1 tức là chính xác tuyệt đối
0 < độ tương đồng (p,q) < 1 tức là trang p có liên quan đến truy vấn q
-1< độ tương đồng (p,q) < 0 tức là trang p không có liên quan đến truy vấn q
Quá trình thu thập dữ liệu dùng trong trình thu thập tuần tự được thực hiện như
sau :
Bước 1: Sắp xếp các URL theo thứ tự giảm dần điểm số. Lấy ra URL đầu tiên
trong danh sách.
- Nếu có qua bước 2.
- Nếu không qua bước 5.
Bước 2: Lấy trang tương ứng với URL qua HTTP.
- Nếu có qua bước 3.
- Nếu không quay lại bước 1.
Bước 3: Kiểm tra xem trang này đã được được thăm chưa?
- Nếu chưa qua bước 4.
- Nếu rồi quay lại bước 1.
Bước 4: Đánh dấu trang này đã được thăm. Bóc tách trang và tìm các liên kết có
trong trang này.
- Nếu có, thêm các liên kết vào cuối danh sách. Quay lại bước 3.
- Nếu không, quay lại bước 1.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
19
Bước 5: Kết thúc.
Ngoài ra chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ cũng có thể
dùng cho trình thu thập đa luồng nhưng độ ưu tiên được tính theo N trong đó N là hàm
của số lượng các luồng đang chạy đồng thời. Các bước trong quá trình thu thập dữ liệu
cũng giống như trên chỉ khác là URL được sắp xếp theo giá trị N giảm dần.
Ngoài chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ còn có nhiều
cách thu thập dữ liệu khác sử dụng thuật toán theo lựa chọn tốt nhất. Chúng khác nhau
ở quy tắc tính điểm số cho URL. Có thể kể đến một số trình thu thập như tìm kiếm
tham ăn (Shark Search), nhện thông tin (InfoSpiders) [1].
1.4. ĐÁNH GIÁ CỦA TRÌNH THU THẬP
Theo một ý nghĩa chung, một trình thu thập có thể dựa vào các đánh giá của
mình để lấy các trang ‘tốt’. Tuy nhiên, một trở ngại chính là vấn đề trong việc công
nhận những trang ‘tốt’ này. Trên thực tế người dùng có thể đưa ra đánh giá sự thích
hợp của các trang được thu thập cho phép chúng ta xác định được việc thu thập dữ liệu
có thành công hay không. Thật không may, những cuộc thử nghiệm liên quan đến
người dùng thực tế để đánh giá các trang web thu thập thường cực kỳ khó thực hiện.
Ví dụ quy mô cực lớn của web cho thấy rằng để có được một khái niệm hợp lý của
một trình thu thập thông tin hiệu quả cần phải tiến hành một lượng lớn thu thập, nghĩa
là liên quan đến một số lượng lớn người sử dụng.
Thứ hai là, thu thập những trang web ‘sống’ sẽ tốn nhiều thời gian. Do đó việc
thu thập các trang web có thời gian sống ngắn sẽ lãng phí thời gian cho người dùng.
Chúng ta có thể lựa chọn để tránh thời gian tải bằng cách chỉ trả về cho người dùng kết
quả tiêu đề và phần mô tả của tất cả các thu thập nhưng điều này lại giới hạn mức độ
thu thập thông tin.
Biện pháp để giải quyết vấn đề này là xây dựng các tiêu chí đánh giá cho các
trình thu thập. Đầu tiên là phải có những tiêu chí đánh giá được độ quan trọng của một
trang web. Khi đã xác định được những trang web quan trọng và có giá trị, trình thu
thập sẽ viếng thăm thường xuyên hơn và sâu hơn. Thứ hai là phải có cơ chế phân tích
tổng quát để đánh giá các mức độ chính xác và hoàn chỉnh của các trang đã thu thập
với truy vấn của người dùng . Nhiều khi các trang mà trình thu thập cho là quan trọng
và có giá trị lại chưa chắc mang thông tin mà người dùng cần tìm kiếm. Nguyên do
của điều này là việc các trang web chuyên về tiếp thị hay quảng cáo luôn luôn tìm cách
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
20
lọt vào danh sách các trang tuyển chọn của trình thu thập, và qua đó họ có thể giới
thiệu sản phẩm của họ đến người dùng. Ngược lại, trong đa số các trường hợp, người
dùng không muốn tìm các quảng cáo tiếp thị mà chỉ muốn tìm thông tin mà họ quan
tâm.
1.4.1. Độ quan trọng của trang web
Độ quan trọng của trang web có thể được đánh giá theo một số tiêu chí chung
như ([1],[8]):
+ Từ khóa trong tài liệu : Một trang được xem là có liên quan nếu nó chứa một
phần hoặc tất cả từ khóa trong truy vấn
+ Tần số phát sinh : được hiểu là tổng số lần xuất hiện của một chữ hay một
cụm từ của từ khoá trong nội dung một trang Web nào đó. Theo sự đánh giá của các
chuyên gia, thì tần số phát sinh của một trang Web càng cao sẽ chứng tỏ nội dung của
trang Web đó càng liên quan hay càng đề cập nhiều đến những gì nêu trong từ khoá.
Do đó, mật độ từ khóa đóng vai trò quan trọng trong việc đánh giá độ quan trọng của
một trang Web.
+ Thẻ meta và câu lệnh title: Trong nhiều trình thu thập, người thiết kế còn cho
rằng sự xuất hiện các chi tiết hay toàn bộ nội dung của từ khoá càng sớm trong một
trang mã HTML thì điều đó chứng tỏ trang đó có thể có chủ đề liên quan càng nhiều
đến từ khoá. Hậu quả là một trang Web có thể được đánh giá quan trọng hơn nếu các
phần hay toàn bộ từ khoá có mặt sớm hơn trong phần mã HTML. Như vậy, trong một
số thẻ meta, trình thu thập sẽ đọc nội dung và đánh giá độ quan trọng. Các thẻ meta
có nhiều hiệu lực cho việc đánh giá là:
Với lý do tương tự, nếu câu lệnh (tựa đề của trang Web) không bị
bỏ trống thì độ quan trọng của nó có thể được nâng cao hơn.
+ Sự tương đồng với các trang hạt giống: Các trang tương ứng với các URL
hạt giống thường là đơn vị đo cho độ liên quan của các trang đã thu thập. Các trang hạt
giống được liên kết với lại thành một tài liệu duy nhất. Độ quan trọng của một trang
web được thu thập được đánh giá bằng độ tương đồng cosin của nó và bộ tài liệu này
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
21
+ Tính phổ biến của liên kết : Một trình thu thập có thể sử dụng kết quả xếp
hạng các liên kết của các trang như alecxa, Google Page Rank để đưa ra đánh giá về
độ quan trọng của trang. Các trang web phân hạng có thể xếp hạng liên kết dựa trên rất
nhiều tiêu chí. Ví dụ như, alecxa là số lượng truy cập còn google là nội dung, mã
nguồn, tên miền vv...
+ Số lượng liên kết ngoài: Theo sự đánh giá của nhiều chuyên gia thì nếu một
trang Web được nhiều nơi khác đề cập tới hay mở liên kết tới địa chỉ của nó thì rõ ràng
giá trị của trang Web này cao hơn là các trang Web cùng kiểu nhưng lại không có hay
ít được liên kết hay đề cập từ các trang khác. Như vậy, các trang Web nào được nhiều
trang Web khác liên kết tới (hay đề cập tới) thì chất lượng của nó có thể cao hơn và
quan trọng hơn.
1.4.2. Phân tích tổng quát
Sau khi đã tính toán được độ quan trọng của trang người ta sẽ dựa vào đó để
phân tích xem thông tin trên những tài liệu thu thập được có thực sự hoàn chỉnh
(recall) và chính xác (precision) với truy vấn người dùng yêu cầu không. Hình dưới
đây minh họa cho độ hoàn chỉnh và độ chính xác của thông tin thu được:
Hình 4: Hình minh họa về độ hoàn chỉnh và độ chính xác
Độ chính xác (precision, [6]) và độ hoàn chỉnh (recall, [6]) trong thu thập thông
tin phụ thuộc vào kết quả của một truy vấn (hình oval) đối với các tài liệu liên quan
(nửa bên trái) và các tài liệu không liên quan (nửa bên phải).
Độ chính xác được định nghĩa là tỉ lệ giữa số lượng các tài liệu liên quan trong
các tài liệu thu được (phần bên trái trong hình oval) trên tổng số tài liệu thu được (hình
oval). Độ chính xác ứng với mũi tên ngang.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
22
Độ hoàn chỉnh được định nghĩa là tỉ lệ giữa số lượng các tài liệu liên quan trong
các tài liệu thu được (phần bên trái trong hình oval) trên tổng số tài liệu liên quan hiện
tại (phần bên trái). Độ hoàn chỉnh ứng với mũi tên chéo.
Càng nhiều kết quả đúng (phần phần bên trái trong hình oval càng lớn) thì kết
quả càng chính xác và càng hoàn chỉnh.
1.4.2.1. Thước đo độ chính xác
Chúng ta sẽ thảo luận một số thước đo độ chính xác [1] :
+ Tỉ lệ thu được : Trong trường hợp chúng ta có điểm số liên quan chúng ta có
thể đo được tỉ lệ rõ ràng của những trang tốt tìm thấy. Do đó, nếu có 50 trang liên quan
được tìm thấy trong 500 trang được thu thập đầu tiên, chúng ta sẽ có tỉ lệ thu được hay
tỉ lệ thu hoạch là 10% của 500 trang.
+ Độ liên quan trung bình: Nếu như điểm số liên quan là liên tục thì chúng có thể
được tính trung bình trên các trang đã thu thập. Đây là một dạng tổng quát hơn tỉ lệ thu
hoạch. Điểm số có thể được cung cấp thông qua độ tương đồng cosin đơn giản hoặc bộ
phân loại huấn luyện. Như vậy độ trung bình có thể được tính qua sự tiến bộ của thu
thập dữ liệu (100 trang đầu, 200 trang đầu ...). Đôi khi độ trung bình được tính trên
một cửa sổ của một vài trang web (ví dụ 50 trang mới nhất từ một điểm thu thập thông
tin)
1.4.2.2. Thước đo độ hoàn chỉnh
Do các thước đo độ hoàn chỉnh là rất khó tính toán cho nên tôi đã sử dụng một số
cách gián tiếp để ước lượng độ hoàn chỉnh. Một số cách có thể kể đến như :
+ Thu hồi mục tiêu : Một tập hợp các URL liên quan được chia thành 2 bộ là hạt
giống và mục tiêu. Trình thu thập bắt đầu từ các trang hạt giống và thu hồi các trang
mục tiêu. Việc thu hồi mục tiêu được tính như sau:
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
23
Trong đó Pt là tập các trang mục tiêu , Pc là tập các trang được thu thập. Lưu ý
rằng giả định ban đầu là các mục tiêu là tập hợp ngẫu nhiên của các trang liên quan.
Hình 5: Hình mình họa thu hồi mục tiêu
+ Độ mạnh mẽ: Các URL hạt giống được chia thành hai bộ tách rời là Sa và Sb.
Mỗi bộ thường khởi tạo một trường hợp của cùng một trình thu thập. Sự chồng chéo
trong các trang thu thập bắt nguồn từ hai bộ này là không tránh khỏi. Một lượng lớn sự
chồng chéo được giải quyết bởi độ mạnh mẽ của trình thu thập.
Độ mạnh mẽ là một số liệu dùng để đo hiệu suất của trình thu thập trong một
cách mà kết hợp cả độ chính xác và độ hoàn chỉnh. Ví dụ, cách tìm kiếm độ dài của
một số các trang được thu thập trước khi một tỷ lệ nhất định của các trang liên quan
được lấy.
Hình 6 là một ví dụ về biểu đồ hiệu suất cho hai trình thu thập khác nhau. Hiệu
suất của trình thu thập được mô tả như là một quỹ đạo theo thời gian (được xấp xỉ
bằng số lượng các trang đã thu thập ). Trình thu thập tối ưu ngây thơ được so sánh với
trình thu thập theo chiều rộng dựa trên đánh giá trên 159 chủ đề với 10000 trang đã thu
thập bởi mỗi trình thu thập trên mỗi chủ đề (vì thế việc đánh giá liên quan đến hàng
triệu trang)
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
24
Hình 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
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
25
Chương 2. XÂY DỰNG WEBSITE TỔNG HỢP THÔNG TIN
Trong chương này chúng ta sẽ từng bước hiện thực hóa việc xây dựng website
tổng hợp thông tin. Phần đầu chương sẽ tìm hiểu về các kiến thức nền tảng và các công
nghệ liên quan, ở 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 và thiết kế giao diện website.
2.1. CÁC KIẾN THỨC NỀN TẢNG
2.1.1. Mạng toàn cầu
Mạng toàn cầu (world wide web [8], gọi tắt là web hoặc www) là một không gian
thông tin toàn cầu mà mọi người có thể truy nhập (đọc và viết) qua các máy tính nối
với mạng Internet. Thuật ngữ này thường được hiểu nhầm là từ đồng nghĩa với chính
thuật ngữ Internet. Nhưng Web thực ra chỉ là một trong các dịch vụ chạy trên Internet,
chẳng hạn như dịch vụ thư điện tử. Web được phát minh và đưa vào sử dụng vào
khoảng năm 1990, 1991 bởi viện sĩ Viện Hàn lâm Anh Tim Berners-Lee và Robert
Cailliau (Bỉ) tại CERN, Geneva, Switzerland.
Các tài liệu trên world wide web được lưu trữ trong một hệ thống siêu văn bản
(hypertext), đặt tại các máy tính trong mạng Internet. Người dùng phải sử dụng một
chương trình được gọi là trình duyệt web (web browser) để xem siêu văn bản. Chương
trình này sẽ nhận thông tin tại ô địa chỉ do người sử dụng yêu cầu (thông tin trong ô
địa chỉ được gọi là tên miền (domain name)), rồi sau đó chương trình sẽ tự động gửi
thông tin đến máy chủ (web server) và hiển thị trên màn hình máy tính của người xem.
Người dùng có thể theo các liên kết siêu văn bản trên mỗi trang web để nối với các tài
liệu khác hoặc gửi thông tin phản hồi theo máy chủ trong một quá trình tương tác.
Hoạt động truy tìm theo các siêu liên kết thường được gọi là duyệt web.
Quá trình này cho phép người dùng có thể lướt các trang web để lấy thông tin.
Tuy nhiên độ chính xác và chứng thực của thông tin không được đảm bảo.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
26
Hình 7: World wide web
World wide web có thể được phân loại thành ba loại: các trang web tĩnh, các
trang web động và các trang web tích cực [4].
- Trang web tĩnh: Một trang web tĩnh là một file HTML cụ thể nằm trên web
server.
- Trang web động : Một trang web động không tồn tại dưới dạng một file cố định
trên web server. Trang Web động chỉ được server tạo ra khi nhận được một yêu cầu cụ
thể từ trình duyệt web. Khi nhận được một yêu cầu, Web server sẽ chạy một chương
trình ứng dụng nào đó để tạo ra nội dung một văn bản. Sau đó văn bản này được trả về
cho trình duyệt.
- Trang web tích cực : Một trang web tích cực là loại văn bản có chứa chương
trình. Chương trình này có khả năng tính toán và hiển thị thông tin. Khi trình duyệt
yêu cầu, server sẽ gửi cho trình duyệt một văn bản có đính kèm chương trình. Trình
duyệt sẽ chạy chương trình này tại máy tính cục bộ của mình, chương trình có thể
tương tác với người sử dụng. Do vậy nội dung trang web tích cực không bất biến mà
thay đổi khi chương trình tương ứng thực thi. Có thể coi các trang web tích cực là các
trang web động về nội dung.
Sau đây là bảng so sánh các loại world wide web:
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
27
Loại web Ưu điểm Nhược điểm
Trang web tĩnh Tính đơn giản, tiện dụng và
tin cậy. Sau khi được tạo ra trang
web tĩnh có một định dạng cố
định và bất biến. Trình duyệt có
thể nhanh chóng hiển thị một
trang web tĩnh, và có thể tăng hiệu
suất hệ thống bằng cách sử dụng
cơ chế cache.
Thiếu tính linh hoạt. Khi
phải thay đổi, chúng ta phải
chỉnh sửa lại mỗi trang web
tĩnh. Điều này không được làm
tự động mà phải làm thủ công.
Do đó trang web tĩnh không
thích hợp khi cần cung cấp
thông tin biến đổi thường
xuyên.
Trang web động Khả năng hiển thị ngay lập
tức thông tin hiện thời từ phía
server. Những thông tin thay đổi
thường xuyên, chẳng hạn như dự
báo thời tiết, giá các loại cổ
phiếu,... có thể được một chương
trình ứng dụng ở phía server sinh
ra và chuyển cho trình duyệt khi
có yêu cầu.
Chi phí cài đặt tương đối
cao và không linh hoạt khi phải
hiển thị thông tin hay thay đổi.
Giống như web tĩnh, một khi
thông điệp được server sinh ra
và chuyển cho trình duyệt thì
nội dung thông điệp là cố định.
Nếu mỗi lần thông tin thay đổi
thì trình duyệt phải cập nhật lại
để lấy nội dung mới.
Trang web tích
cực
Ưu điểm chính của web tích
cực so với web động chính là khả
năng cập nhật thông tin liên tục do
khả năng web tích cực có khả
năng tương tác trực tiếp với server
để cập nhật thông tin. Ví dụ một
trang web hiển thị giá của thị
trường chứng khoán có thể tự
động cập nhật giá các loại cổ
phiếu mà không cần bất kỳ sự can
thiệp nào từ phía người dùng.
Nhược điểm chính của
web tích cực là chi phí xây
dựng và khả năng an ninh hệ
thống. Vì phải tải và sau đó
thực thi một chương trình từ
server, nên phải có khả năng
đảm bảo chương trình này
không làm gì có hại trên máy
khách (client).
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
28
2.1.2. Giao thức truyền tải siêu văn bản
Giao thức truyền tải siêu văn bản (Hyper Text Transfer Protocol viết tắt là HTTP,
[4]) là giao thức quan trọng nhất của web. Các tiến trình máy khách (client) và máy
chủ (server) trên các hệ thống đầu cuối khác nhau giao tiếp với nhau thông qua việc
trao đổi các thông điệp HTTP.
Hình 8. Tương tác client và server
Có 2 loại thông điệp HTTP là : Thông điệp yêu cầu (HTTP request) và thông
điệp trả lời (HTTP response)
2.1.3. Ngôn ngữ đánh dấu siêu văn bản
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
29
Ngôn ngữ đánh dấu siêu văn bản (Hyper Text Markup Language viết tắt là
HTML) là một ngôn ngữ đánh dấu được thiết kế ra để tạo nên các trang web. HTML
được xem như là một ứng dụng của SGML (Standard Generalized Markup Language –
một chuẩn ISO định nghĩa các ngôn ngữ đánh dấu văn bản tổng quát). HTML được tổ
chức World Wide Web Consortium (W3C, [7]) duy trì và là ngôn ngữ đánh dấu cốt lõi
của World Wide Web. Phiên bản mới nhất của nó hiện là HTML 4.01. Tuy nhiên
HTML hiện không còn được phát triển tiếp mà người ta đã thay thế nó bằng XHTML
– một chuẩn HTML mở rộng dựa trên XML và có cú pháp chặt chẽ hơn HTML. Mặc
dù vậy nhưng phần lớn các trang web hiện nay vẫn được viết bằng HTML.
Có bốn loại phần tử đánh dấu trong HTML [8]:
Đánh dấu có cấu trúc miêu tả mục đích của phần văn bản (ví dụ,
VietNam sẽ điều khiển phần mềm đọc hiển thị “VietNam” là tiêu đề cấp
một).
Đánh dấu trình bày miêu tả phần hiện hình trực quan của phần văn bản bất kể
chức năng của nó là gì (ví dụ in đậm sẽ hiển thị thành in đậm).
Đánh dấu liên kết ngoài chứa phần liên kết từ trang này đến trang kia. Ví dụ
như Wikipedia sẽ hiển thị từ
wikipedia.org/ như là một liên kết ngoài đến
Các phần tử thành phần điều khiển giúp tạo ra các đối tượng điều khiển như
các nút bấm, các ô textbox để nhập liệu.
Một tài liệu HTML được tạo nên bởi các phần tử HTML(Element, [2]). Một cách
tổng quát, một element bao gồm 3 thành phần: một cặp thẻ (tags) gồm một thẻ bắt đầu
và một thẻ kết thúc; các thuộc tính (nằm trong thẻ bắt đầu); và toàn bộ phần ký tự,
hình ảnh, nội dung thông tin sẽ được hiển thị lên màn hình. Một element là mọi thứ
nằm giữa hai thẻ đầu cuối, tính cả hai thẻ này.
HTML là ngôn ngữ không phân biệt chữ hoa hay chữ thường (hai thẻ và
đều là một). Các phần tử HTML cần có một thẻ mở và một thẻ đóng, tuy nhiên
điều này không luôn luôn đúng, có nhiều phần tử không cần thẻ đóng, ví dụ các
thẻ, và . Ngoài ra khi lồng nhau, các phần tử HTML cũng không cần
thiết phải lồng nhau theo đúng thứ tự (tức là thẻ nào mở trước thì phải đóng sau).
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
30
2.2. CÁC CÔNG NGHỆ LIÊN QUAN
Phần tiếp theo tôi sẽ trình bày về các công nghệ sẽ sử dụng để xây dựng ứng
dụng website tổng hợp thông tin.
2.2.1. Ngôn ngữ lập trình PHP
PHP [8] là một ngôn ngữ lập trình kịch bản hay một loại mã lệnh chủ yếu được
dùng để phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích
tổng quát. Nó rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML. Do
được tối ưu hóa cho các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và
Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ
khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế
giới.
Đoạn mã sau minh họa giúp cách viết PHP lồng vào các trang HTML dễ dàng
như thế nào:
1.
2.
3. Mã mẫu
4.
5.
6. <?php
7. echo "Hello world!";
8. ?>
9.
10.
Thẻ sẽ đánh đấu sự bắt đầu và sự kết thúc của phần mã PHP qua
đó máy chủ biết để xử lý và dịch mã cho đúng. Đây là một điểm khá tiện lợi của PHP
giúp cho việc viết mã PHP trở nên khá trực quan và dễ dàng trong việc xây dựng phần
giao diện ứng dụng HTTP.
PHP chỉ phân tích các đoạn mã nằm trong những dấu giới hạn của nó. Bất cứ mã
nào nằm ngoài những dấu giới hạn đều được xuất ra trực tiếp không thông qua xử lý
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
31
bởi PHP. Các dấu giới hạn thường dùng nhất là , tương ứng với dấu giới
hạn mở và đóng. Các dấu giới hạn và cũng đôi khi
được sử dụng. Cách viết dấu giới hạn dạng thẻ ngắn cũng có thể được dùng để thông
báo bắt đầu đoạn mã PHP, là <? hay <?= (dấu này được sử dụng để in ra (echo) các
xâu ký tự hay biến) với thẻ thông báo kết thúc đoạn mã PHP là ?>.
Các biến được xác định bằng cách thêm vào trước một dấu đô la ($) và không
cần xác định trước kiểu dữ liệu. Không giống với tên hàm và lớp, tên biến là trường
hợp nhạy cảm. Cả dấu ngoặc kép ("") và ký hiệu đánh dấu văn bản (‘’) đều có thể
dùng để truyền xâu và giá trị biến. PHP coi xuống dòng như một khoảng trắng theo
kiểu như một ngôn ngữ dạng tự do (free-form language) (trừ khi nó nằm trong trích
dẫn xâu), và các phát biểu được kết thúc bởi một dấu chấm phẩy. PHP có ba kiểu cú
pháp chú thích: /* */ cho phép một đoạn chú thích tùy ý, trong khi đó // và # cho phép
chú thích trong phạm vi một dòng.
2.2.1.1. Biểu thức chính quy
Biểu thức chính quy (Regular Expressions hay Regex, [9]) là một chuỗi miêu tả
một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định, hoặc có thể hiểu đơn
giản hơn là một mẫu (pattern) dùng để mô tả 1 lớp ký tự nào đó.
Áp dụng vào trong vấn đề thu thập thông tin, biểu thức chính quy đóng vai trò
quan trọng trong việc bóc tách thông tin. Sử dụng thành thạo biểu thức chính quy ta có
thể bóc tách được mọi thông tin trong một trang html.
Trong PHP, ta có thể sử dụng biểu thức regex thông qua các hàm regex. PHP
cung cấp 3 nhóm hàm regex, tên của chúng dc bắt đầu bởi: ereg, mb_ereg và preg. 2
loại đầu sử dụng engine POSIX Extended, còn preg sử dụng engine PCRE (Perl-
Compatible). Ở đây chúng ta chỉ cần tìm hiểu về nhóm preg. Một số hàm phổ biến
trong nhóm preg là:
Hàm preg_math : sử dụng khi muốn dùng một pattern để lấy ra một chuỗi trong
một chuỗi khác.
- Cấu trúc hàm:
<?php
$string = 'chuỗi cần áp dụng biểu thức regex';
$pattern = '/biểu thức regex/';
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
32
preg_match($pattern, $string, $match);
?>
Trong đó $match chính là kết quả khi ánh xạ $pattern vào $string.
- Ví dụ :
$string = ‘LazyDog is not a dog’
$pattern = ‘dog’
Thì $match sẽ là ‘dog’. Vì biểu thức chính quy mặc định phân biệt chữ
hoa và chữ thường.
Hàm preg_replace : sử dụng khi muốn tìm kiếm và thay thế một chuỗi trong
một chuỗi khác.
- Cấu trúc hàm: preg_match($pattern, ’’ , $string)
- Ví dụ : Để loại bỏ tất cả các ký tự không phải (a-z) và (A-Z) và số (0,9) ra
khỏi chuỗi ta dùng hàm:
preg_replace('/[^a-z0-9]+/i','',$str);
Biểu thức chính quy bao gồm 11 ký tự / cặp ký tự mang ý nghĩa đặc biệt. Để
giải phóng các ký tự / cặp ký tự đặc biệt ta dùng ký tự ’ \ ‘ đằng trước các ký tự đặc
biệt. Sau đây là bảng các ký tự / cặp ký tự đặc biệt:
Ký tự / cặp ký tự Ý nghĩa Ví dụ Kết quả
{...} Bắt đầu vào kết thúc min, max
ký tự
a{1,3} a,aa,aaa
[...] Bắt đầu và kết thúc một lớp
ký tự
[a-z] Tất cả các ký
tự từ a đến z
(...) Bắt đầu và kết thúc một so
mẫu con
\ Dùng để giải phóng các ký tự
đặc biệt
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
33
^ Ký tự bắt đầu, nếu đặt trong
lớp ký tự nó mang ý nghĩa
phủ định
[^a-z] Những ký tự
không phải là
a-z
$ Ký tự kết thúc (.*)basic$ Chuỗi kết
thúc bằng
basic
. Bất kỳ ký tự nào trừ ký tự
xuống dòng
(.*) Lấy các ký tự
trên 1 dòng
| Hoặc a(c|d)b Chuỗi acb
hoặc adb
? Có hoặc không ab?c Chuỗi abc
hoặc ac
* Lặp nhiều lần hoặc không lặp a* , a,
aa...
+ Lặp ít nhất một lần a+ a, aa, aaa, ...
Trên thực tế ngoài các ký tự có thể in được bình thường chúng ta còn có những
ký tự không in được như tab, space, esc. Để giải quyết vấn đề này biểu thức chính quy
sử dụng các tổ hợp ký tự đặc biệt để thể hiện các ký tự không in được. Sau đây là bảng
các tổ hợp ký tự thông dụng được sử dụng trong biểu thức chính quy:
Tổ hợp phím Thể hiện cho ký tự
\t Tab
\n Xuống dòng
\e Esc
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
34
\s Space
\d Lớp ký tự [0-9]
\w Lớp ký tự [a-zA-Z]
2.2.1.2. Các hàm xử lý chuỗi
Trong PHP có rất nhiều các loại hàm xử lý chuỗi, trong phạm vi xây dựng ứng
dụng ta chỉ cần xét một số các hàm tìm kiếm và so sánh chuỗi [10].
2.2.1.2.1. Tìm kiếm chuỗi trong chuỗi
Để tìm kiếm một chuỗi bên trong một chuỗi khác, ta có thể sử dụng một trong ba
hàm strstr(), strchr(), strrchar() hay stristr().
Hàm strstr() trả về chuỗi str1 nếu chúng tìm thấy chuỗi str1 trong chuỗi str2,
ngược lại hàm trả về giá trị false, nếu có nhiều chuỗi str1 giống nhau, hàm này chỉ tìm
kiếm chuỗi str1 đầu tiên.
Cú pháp: string strstr(string str1, string str2);
2.2.1.2.2. Tìm vị trí của chuỗi con
Để tìm kiếm một chuỗi bên trong một chuỗi khác, ta có thể sử dụng một trong ba
hàm strstr(), strchr(), strrchar() hay stristr(). Nhưng để tìm kiếm vị trí xuất hiện str1
trong chuỗi str2, ta có thể sử dụng các hàm như: strpos(), strrpos(). Hàm strpos() trả
về vị trí tìm thấy chuỗi str1 trong chuỗi str2, ngược lại hàm trả về giá trị -1. Nếu có
nhiều chuỗi str1 giống nhau, hàm này chỉ trả về vị trí chuỗi str1 đầu tiên
Cú pháp: int strpos(string str1, string str2 [int off]);
Kí tự đầu tiên của chuỗi tính từ 0.
2.2.1.2.3. Hàm so sánh chuỗi
Để so sánh chuỗi, có thể sử dụng hàm strcmp(), nếu hàm này trả về giá trị 0 khi
hai chuỗi này bằng nhau, nếu chuỗi str1 lớn hơn str2 thì hàm trả về giá trị lớn hơn 0,
ngược lại nếu str1 nhỏ hơn str2 hàm trả về giá trị nhỏ hơn 0.
Cú pháp: int strcmp(string1, string2);
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
35
2.2.1.2.4. Kiểm tra chiều dài của chuỗi
Khi muốn kiểm tra chiều dài của chuỗi, ta có thể sử dụng hàm strlen(str).
Ví dụ:
<?
$str="your customer service is excellent."; echo "Length: " .strlen($str);
?>
Kết quả in ra là : Length: 23
2.2.2. MySQL
MySQL [8] là hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới và
được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng. Vì MySQL
là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạt động trên
nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh.Với tốc độ và
tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên
internet.
Một số đặc điểm của MySQL:
MySQL là một phần mềm quản trị CSDL dạng server-based, nó quản lý dữ liệu
thông qua các cơ sở dữ liệu, mỗi cơ sở dữ liệu có thể có nhiều bảng quan hệ chứa dữ
liệu.
MySQL có cơ chế phân quyền người sử dụng riêng, mỗi người dùng có thể quản
lý được một hay nhiều cơ sở dữ liệu khác nhau, mỗi người dùng có một tên truy cập và
mật khẩu tương ứng để truy xuất đến cơ sở dữ liệu.
Khi ta truy vấn tới cơ sở dữ liệu MySQL, ta phải cung cấp tên truy cập và mật
khẩu của tài khoản có quyền sử dụng cơ sở dữ liệu đó.
Các bước xây dựng chương trình kết nối tới cơ sở dữ liệu bằng ngôn ngữ PHP
[11] :
Thông thường, trong một ứng dụng có giao tiếp với cơ sở dữ liệu, ta phải làm trình
tự các bước sau:
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
36
Bước 1: Thiết lập kết nối tới cơ sở dữ liệu
Để kết nối tới MySQL, ta sử dụng hàm mysql_connect()
Cú pháp: mysql_connect (host, tên_truy_cập, mật_khẩu);
Ví dụ:
<?php
$link= mysql_connect("localhost","root","");
If(!link)
{
echo "Không thể kết nối tới cơ sở dữ liệu";
}
?>
Bước 2: Lựa chọn cơ sở dữ liệu
Để lựa chọn một cơ sở dữ liệu nào đó ta dùng hàm mysql_select_db()
Cú pháp : mysql_select_db (tên_CSDL)
Ví dụ:
<?php
$connect = mysql_connect("localhost","root","")
or die ("Không thể kết nối tới cơ sở dữ liệu");
mysql_select_db("luan_van",$connect) or die ("Không tìm thấy cơ sở dữ liệu");
?>
Bước 3: Tiến hành các truy vấn SQL
Bước 4: Đóng kết nối tới cơ sở dữ liệu
Để đóng kết nối tới cơ sở dữ liệu, ta dùng hàm mysql_close().
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
37
2.2.3. Một số công nghệ và tiện ích khác
2.2.3.1. Add-ons firebug của firefox
Firebug là một tiện ích rất hữu ích của trình duyệt firefox, hoàn toàn miễn phí, hỗ
trợ người dùng theo dõi cấu trúc của trang web, xác định các phần tử của trang web
thông qua mô hình thẻ tag dạng cây. Dưới đây là hình minh họa khi sử dụng firebug để
tìm thẻ tag của tiêu đề bài viết trên trang vnexpress.net
Hình 9: Add-ons firebug của trình duyệt firefox
2.2.3.2. Ajax
Ajax [8] là một nhóm các công nghệ phát triển web được sử dụng để tạo các ứng
dụng web động. Ưu điểm của ajax là:
Trong nhiều trường hợp, các trang web chứa rất nhiều nội dung thông thường
trong trang. Nếu sử dụng các phương pháp truyền thống, những nội dung đó sẽ phải
nạp lại toàn bộ với từng yêu cầu. Tuy nhiên, nếu sử dụng Ajax, một ứng dụng web có
thể chỉ yêu cầu cho các nội dung cần thiết phải cập nhật, do đó giảm lượng lớn băng
thông và thời gian nạp trang.
Việc dùng các yêu cầu không đồng bộ (asynchronous request) cho phép giao
diện người dùng của ứng dụng hiển thị trên trình duyệt giúp người dùng trải nghiệm sự
tương tác cao, với nhiều phần riêng lẻ.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
38
2.3. PHÂN TÍCH
Để hiện thực hóa việc xây dựng trang web tổng hợp các bài viết từ trang Dân trí
trước tiên chúng ta cần nắm được cấu trúc các bài viết trong một trang báo điện tử, từ
đó phân tích và đưa ra các giải pháp nhằm giúp cho việc thu thập thông tin đạt hiệu
quả cao.
2.3.1. Cấu trúc bài viết trong trang báo điện tử
Cấu trúc bài viết trong các trang báo điện tử luôn được xây dựng giống nhau có
thể chia ra làm các phần chính là: phần nội dung bài viết, phần nội dung chuyên mục
và phần nội dung trang chủ.
- Phần nội dung bài viết:
Phần nội dung bài viết có thể chia thành bốn trường thông tin chính bao gồm :
+ Trường tiêu đề (title): Chứa tiêu đề bài viết.
+ Trường giới thiệu (introduction): Chứa nội dung phần giới thiệu bài viết.
+ Trường nội dung (content): Chứa nội dung bài viết bao gồm văn bản và hình
ảnh.
+ Trường thời gian (date time): Chứa ngày tháng và thời gian bài viết được
đăng
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
39
Hình 10: Cấu trúc phần bài viết
- Phần nội dung chuyên mục (category):
Chuyên mục bao gồm các bài viết về cùng một chủ đề. Phần nội dung chuyên
mục sẽ hiển thị ra phần mô tả các bài viết này. Phần mô tả bài viết bao gồm: trường
tiêu đề, trường giới thiệu, trường hình ảnh.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
40
Hình 11: Cấu trúc phần chuyên mục
- Phần nội dung trang chủ:
Trang chủ bao gồm các chuyên mục lớn (còn gọi là các chuyên mục cha). Phần
nội dung trang chủ sẽ hiển thị ra phần mô tả các chuyên mục cha. Trong mỗi phần mô
tả này sẽ có phần mô tả bài viết mới nhất trong chuyên mục và tiêu đề các bài viết
khác trong chuyên mục.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
41
Hình 12: Cấu trúc phần trang chủ
Thông qua cấu trúc bài viết ở trên ta thấy rằng để xây dựng thành công trang web
thu thập tin tự động ta cần phải thu thập được phần nội dung bài viết và phần nội dung
các chuyên mục. Cách làm phổ biến hiện nay là thu thập toàn bộ nội dung bài viết lưu
vào cơ sở dữ liệu để tiện cho việc xây dựng trang web, tôi gọi đây là cách làm truyền
thống. Trong quá trình tìm hiểu và xây dựng trang web, tôi đã nhận ra một số khuyết
điểm của cách làm này, từ đó đã tìm ra một cách làm mới có một số cải tiến sáng tạo
có thể hạn chế được các khuyết điểm của cách làm truyền thống. Ở phần sau của khóa
luận tôi sẽ lần lượt trình bày hai cách làm và phân tích ưu nhược điểm của chúng.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
42
2.3.2. Các cách thu thập bài viết
2.3.2.1. Cách làm truyền thống
2.3.2.1.1. Các bước thực hiện
Quá trình thu thập bài viết được chia thành các bước:
Bước 1: Thu thập URL bài viết
Ở bước này chúng ta sẽ thu thập tất cả các đường dẫn URL ứng với các trang bài viết.
Tất cả các trang báo điện tử hiện nay đều lưu trữ các bài viết theo các chuyên mục
(category), việc làm này làm cho trang báo trực quan và thuận tiện cho người dùng khi
muốn tìm kiếm thông tin. Với trang báo điện tử lớn như Dân trí thì ngoài các bài viết
còn có rất nhiều các chuyên mục quảng cáo, các đường dẫn javascrips, các mục bài
viết lồng nhau (ví dụ như phần tiêu điểm, tin nổi bật ...) chính vì thế vấn đề đặt ra
trước hết là phải lọc được các URL bài viết theo các category, sau đó phải có một cơ
chế để tránh lấy một URL nhiều lần.
Để lấy ra các đường dẫn URL ta có thể dùng hàm preg_math với $pattern là một biểu
thức chính quy lấy ra các siêu liên kết. Kết quả thu được là một mảng với các phần tử
là các URL.
Sau đây là một ví dụ minh họa việc lấy ra các URL trong danh mục phapluat của trang
Dân trí:
<?php
$crawler=file_get_contents('
1.htm'); // duyệt nội dung của trang phapluat gán vào biến $crawler
$pattern='/href="([^"]*)/is'; // biểu thức chính quy lấy ra các siêu liên kết
preg_match_all($pattern ,$crawler,$matches);
print_r($matches[1]);
?>
Kết quả sẽ in ra là :
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
43
Tiếp theo để lọc ra các URL bài viết trong danh mục pháp luật ta sẽ xử dụng các hàm
tìm kiếm chuỗi trong PHP.
Ví dụ :
$result = array_unique($matches[1]); // đưa kết quả vào mảng unique
foreach ($result as $url){ // duyệt từng phần tử
$find1= '.htm';
$find2= 's170'; // s170 là mã category
if ((strpos($link,$find1)==true) //lọc ra chuỗi có chứa chuỗi .htm
&&(strpos($link,$find2)==true)) { //lọc ra chuỗi có chứa chuỗi s170
$content=file_get_contents('
echo $content.''; // in ra nội dung URL bài viết
}
}
Bước 2: Bóc tách nội dung bài viết
Trước khi bóc tách thông tin ta sẽ sử dụng firebug – một add-ons của firefox, để xác
định các phần tử của trang web thông qua mô hình thẻ tag dạng cây.
Thông tin của một bài viết sẽ được bóc tách bằng cách sử dụng biểu thức chính quy và
các hàm xử lý chuỗi trong PHP. Một bài viết sẽ được chia thành các trường thông tin
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
44
bao gồm : tiêu đề bài viết, giới thiệu bài viết, ảnh trong bài viết, nội dung bài viết, thời
gian đăng bài viết và mã category tương ứng. Toàn bộ nội dung bài viết sau khi bóc
tách xong sẽ được lưu vào cơ sở dữ liệu.
Sau đây là một ví dụ việc bóc tách nội dung một bài viết bất kỳ trên Dân trí lấy
ra trường date time:
$link=”...” ; //$link là một URL bài viết bất kỳ
$crawler=file_get_contents("$link");
//duyệt nội dung của bài viết gán vào biến content
$pattern = '/(.*?)/is';
// biểu thức chính quy lấy ra thời gian đăng bài viết
preg_match_all($pattern ,$crawler,$matches);
foreach ($matches[1] as $date)
{
echo "".$date."" ; // in ra kết quả
}
2.3.2.1.2. Nhận xét
Cách làm này có một số nhược điểm như sau:
- Tốc độ thu thập chậm
Tốc độ thu thập chậm do phải duyệt nội dung hai lần. Lần đầu tiên là phải duyệt nội
dung chuyên mục để lấy ra các URL bài viết, lần thứ hai là phải duyệt nội dung các bài
viết để lấy ra các trường thông tin.
- Cơ sở dữ liệu quá lớn
Cơ sở dữ liệu lớn do phải lưu toàn bộ nội dung bài viết. Ta thử tưởng tượng chỉ với
trang Dân trí đã có tới gần 400 nghìn bài viết, để lưu trữ cũng cần vài Gigabyte cơ sở
dữ liệu. Việc lưu trữ này sẽ vô cùng vất vả khi ta muốn tổng hợp thêm tin tức từ nhiều
trang báo điện tử khác nhau. Vì là trang web tổng hợp thông tin nên nếu chỉ lấy nội
dung từ một trang Dân trí thì không khả thi, trang web phải có khả năng tổng hợp
thông tin từ nhiều nguồn thì mới có giá trị thương mại.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
45
- Ngoài hai nhược điểm quan trọng kể trên thì còn một số nhược điểm khác
trong quá trình hiển thị bài viết. Ví dụ như trong một bài viết có thể có nhiều ảnh đặc
biệt là những bài phóng sự qua ảnh, khi đó cần cơ chế chung để chọn ra một ảnh đại
diện để hiển thị ở phần mô tả bài viết. Mà các cơ chế này là khác nhau tùy vào từng
trang báo. Do đó phần mô tả bài viết trong trang web tổng hợp thông tin sẽ không đảm
bảo được tính toàn vẹn so với bài viết ở trang gốc.
Trong quá trình xây dựng trang web tôi đã nhận ra được các nhược điểm trong cách
làm này, vì thế tôi đã tìm ra cách làm mới. Cách làm này có tốc độ thu thập nhanh hơn,
cơ sở dữ liệu gọn nhẹ và đảm bảo được tính toàn vẹn của bài viết.
2.3.2.2. Cách làm mới
2.3.2.2.1. Các bước thực hiện
Quá trình thu thập bài viết được thực hiện qua các bước:
Bước 1: Thu thập và bóc tách nội dung phần mô tả bài viết
Phần mô tả bài viết được minh họa ở hình 11. Trong phần này chúng ta sẽ thu thập
các phần mô tả bài viết ứng với từng chuyên mục. Để làm được điều này ta cũng dùng
hàm preg_math giống như cách làm truyền thống, trong đó $pattern là biểu thức chính
quy để lấy ra phần mô tả. Sau đó ta sẽ thực hiện việc bóc tách nội dung phần mô tả để
lấy ra các trường thông tin bao gồm : tiêu đề bài viết, giới thiệu bài viết, ảnh đại diện,
URL bài viết. Trong URL bài viết ta lại lấy ra các trường: mã bài viết, mã chuyên
mục, đường dẫn chuyên mục sau đó lưu tất cả vào cơ sở dữ liệu.
Sau đây là đoạn mã chương trình minh họa trình thu thập thực hiện việc thu thập phần
mô tả bài viết:
function crawler($url){
$crawler = file_get_contents($url); // duyệt nội dung của trang ứng với url
$pattern = '/(.*?)Xem\stiếp/is';
//biểu thức chính quy lấy ra phần mô tả
preg_match_all($pattern ,$crawler,$matches); //kỹ thuật so trùng để lấy kết quả
foreach ($matches[1] as $link){
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
46
$find1= '.htm'; // tìm kiếm chuỗi có đuôi htm
if (strpos($link,$find1)==true)
{
add_into_db($link); // gọi hàm bóc tách nội dung
}
}
}
Bước 2: Hiển thị nội dung bài viết
Sau khi đã lấy được nội dung các phần mô tả và lưu vào cơ sở dữ liệu, lúc này ta sẽ
thực hiện bước hiển thị nội dung ra trang web. Vì phần mô tả bài viết được lấy hoàn
toàn từ trang gốc nên ta chỉ quan tâm đến việc hiển thị nội dung các bài viết. Do nội
dung các bài viết không được lưu trong cơ sở dữ liệu nên khi ấn vào một đường dẫn
bài viết thay vì lấy nội dung từ cơ sở dữ liệu ta sẽ gọi hàm bóc tách nội dung bài viết.
Hàm bóc tách nội dung bài viết được xây dựng giống như trong cách làm truyền
thống. Ý tưởng sáng tạo ở đây là: Trình thu thập lúc này không cần phải thu thập mà
chỉ có nhiệm vụ bóc tách nội dung bài viết mà tốc độ bóc tách một bài viết của trình
thu thập là rất nhanh nên ta không cần lưu vào cơ sở dữ liệu.
2.3.2.2.2. Nhận xét
Cách làm mới có một số ưu điểm sau:
- Tốc độ thu thập nhanh hơn đáng kể
Tốc độ thu thập nhanh do hai lý do: thứ nhất là trình thu thập chỉ phải duyệt nội dung
một lần (duyệt nội dung category) và thứ hai là lượng dữ liệu thu thập ít hơn nhiều.
- Cơ sở dữ liệu gọn nhẹ
Cơ sở dữ liệu giảm khoảng hơn 10 lần do không phải lưu nội dung các bài viết, kiểm
thử bằng cách thu thập 15000 bài viết, ở cách làm truyền thống cơ sở dữ liệu là hơn
100Mb trong khi cách làm này cơ sở dữ liệu chỉ có 9Mb.
- Đảm bảo tính toàn vẹn cho tài liệu gốc
Phần mô tả bài viết và phần nội dung bài viết mới là giống với bài viết gốc do đó đảm
bảo được tính toàn vẹn của bài viết gốc.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
47
2.4. THIẾT KẾ
Một số đặc điểm của website:
- Website được viết bằng ngôn ngữ lập trình PHP tương tác với cơ sở dữ liệu
MySQL.
- Website là một trang web tích cực.
- Website thực hiện việc thu thập bài viết từ trang báo điện tử lớn là Dân trí
( Tên các chuyên mục được lấy giống như trang Dân trí. Quá
trình thu thập và bóc tách bài viết là tự động.
- Thuật toán sử dụng để thu thập dữ liệu là thuật toán tìm kiếm theo chiều rộng.
- Phần chuyên mục (category) của website được viết bằng ajax nên có độ tùy
biến cao.
2.4.1. Cấu trúc cơ sở dữ liệu
2.4.1.1. Danh sách các bảng
STT Tên Mô tả
1 category Bảng các category
2 news Bảng nội dung các bài viết được thu thập
2.4.1.2. Chi tiết các bảng
- Bảng category trong cấu trúc cơ sở dữ liệu
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
48
STT Thuộc tính Kiểu Miền giá trị Ghi chú
1 cate_id int 11 Khóa chính
2 cate_name varchar 30
3 cate_code varchar 11 Quan hệ với bảng news
4 cate_path varchar 30
5 cate_parent int 11
- Ý nghĩa của các thuộc tính:
+ cate_id: Số thự tự của category trong bảng category, tự động tăng dần
+ cate_name: Tên của category
+ cate_code: Mã của category
+ cate_path: Đường dẫn tương đối của category
+ cate_parent: Số category cha
- Bảng news trong cấu trúc cơ sở dữ liệu
STT Thuộc tính Kiểu Miền giá trị Ghi chú
1 news_id int 11 Khóa chính
2 news_title varchar 1000
3 news_img text 1000
4 news_link varchar 1000
5 news_intro text
6 news_num varchar double
7 cate_code varchar 11
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
49
- Ý nghĩa các thuộc tính:
+ news_id: Số thự tự của bài viết trong bảng news, tự động tăng dần
+ news_title: Tiêu đề của bài viết
+ news_img: Đường dẫn ảnh trong bài viết
+ news_link: Đường dẫn của bài viết
+ news_intro: Phần giới thiệu của bài viết
+ news_num: Mã bài viết
2.4.2. Phần quản trị cơ sở dữ liệu
Phần quản trị cơ sở dữ liệu được thiết kế trực quan, rất dễ sử dụng. Người dùng
có thể lựa chọn thu thập bài viết từ một hoặc nhiều chủ đề, cũng có thể chọn chủ đề
mình thích hoặc lựa chọn thu thập tất cả các chủ đề. Đây là giao diện chính của phần
quản trị:
Hình 13: Giao diện phần quản trị cơ sở dữ liệu
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
50
2.4.3. Phần giao diện chính trang web
Giao diện chính được thiết kế đơn giản, đẹp mắt, dễ sử dụng. Cấu trúc trang web
giống với cấu trúc của các trang báo điện tử lớn nên thuận tiện cho việc tra cứu, các
chủ đề được sắp xếp một cách khoa học.
Hình dưới đây mô tả giao diện chính của trang web tổng hợp thông tin:
Hình 14: Giao diện của trang web tổng hợp thông tin
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
51
CHƯƠNG 3: KẾT LUẬN
Trong khoảng thời gian ba tháng từ khi nhận đề tài đến khi hoàn thành xong khóa
luận, tôi đã có những cố gắng nhất định và đã đạt được một số kết quả bước đầu. Bằng
sự nỗ lực của bản thân và sự giúp đỡ tận tình của thầy Hoàng Xuân Huấn tôi đã hoàn
thành xong khóa luận tốt nghiệp với đề tài: “Tìm hiểu trình thu thập web và xây dựng
trang web tổng hợp thông tin”.
3.1. CÁC KẾT QUẢ ĐÃ ĐẠT ĐƯỢC
- Tìm hiểu được kiến trúc của trình thu thập web, cơ chế hoạt động của một trình
thu thập web cơ bản, các chiến lược thu thập dữ liệu, cơ chế đánh giá các trang web
của các trình thu thập.
- Từ những kiến thức thu được trong quá trình tìm hiểu về trình thu thập web, tôi
đã hướng đến xây dựng một ứng dụng sử dụng trình thu thập web để thu thập bài viết
tự động từ các trang báo điện tử lớn của Việt Nam. Ứng dụng bước đầu là thu thập các
bài viết từ trang Dân trí đã hoạt động tốt, đảm bảo được 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 các bài viết gốc.
- Giao diện phần quản trị được thiết kế trực quan, dễ sử dụng, thuận lợi cho
người sử dụng, có độ tùy biến cao. Người dùng có thể lựa chọn thu thập bài viết từ
một hoặc nhiều chủ đề, cũng có thể chọn chủ đề mình thích hoặc lựa chọn thu thập tất
cả các chủ đề.
- Giao diện của trang web được thiết kế đơn giản, đẹp mắt, bố cục khoa học,
thuận tiện cho việc tìm kiếm.
3.2. HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
Do thời gian thực hiện khóa luận có hạn nên tôi chưa thể thực hiện trọn vẹn ý
tưởng tổng hợp các bài viết từ nhiều trang báo khác nhau. Nếu được phát triển thêm tôi
sẽ nghiên cứu thêm cách tổng hợp các chuyên mục một cách tự động từ đó sẽ hoàn
thành ý tưởng của mình một cách trọn vẹn. Về mặt lý thuyết tôi sẽ tìm hiểu kỹ hơn về
trình thu thuật web, các kỹ thuật mới để cải tiến hiệu suất, nâng cao tốc độ thu thập.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
52
Hướng phát triển tiếp theo của đề tài là xây dựng một hệ thống máy tìm kiếm thông tin
dựa trên cơ sở dữ liệu thu thập được.
Tìm hiểu về web crawler và xây dựng website tổng hợp thông tin 2010
53
TÀI LIỆU THAM KHẢO
[1] Gautam Pant, Padmini Srinivasan, Filippo Menczer. Crawling the Web. Web
Dynamics 2004, pp 153-178
[2] Sriram Raghavan, Hector Garcia-Molina. Crawling the Hidden Web.
Computer Science Department, Stanford University, USA 2001.
[3] Soumen Chakrabarti. Mining the Web: Discovering knowledge from hypertext
data. Elsevier Science, Morgan Kaufmann Publishers 2003.
[4] Hồ Đắc Phương. Mạng máy tính. NXB Đại học Quốc gia Hà Nội 2007.
[5] Đinh mạnh Tường. Cấu trúc dữ liệu và thuật toán. Nhà xuất bản khoa học và
kỹ thuật 2000.
[6] Wikipedia,
[7] World Wide Web Consortium (W3C),
[8] Bách khoa toàn thư tiếng Việt,
[9] Biểu thức chính quy,
[10] Hàm xử lý chuỗi,
chuoi.html
[11] MySQL,
[12] Robot Exclusion Protocol,
va-robotstxt/
Các file đính kèm theo tài liệu này:
- LUẬN VĂN- TÌM HIỂU VỀ WEB CRAWLER VÀ XÂY DỰNG WEBSITE TỔNG HỢP THÔNG TIN.pdf