Một số ví dụ có thể kể ra như: nhu cầu trích xuất thông tin về tất cả các mặt hàng thuộc một chuyênmục của một website bán hàng nào đó nhằm phục vụ mục đích khảo sát thị trường,nhu cầu t
Trang 1VIỆN CÔNG NGHỆ THÔNG TIN
Trang 2Luận văn thạc sĩ này được thực hiện trong khuôn khổ đề tài nghiên cứu mang
mã số, Đại học Quốc gia Hà Nội
Hà Nội, ngày 20 tháng 05 năm 2013
Học viên
Nguyễn Bình Minh
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan kết quả đạt được trong luận văn là sản phẩm nghiên cứu, tìmhiểu của riêng cá nhân tôi Trong toàn bộ nội dung của luận văn, những điều đượctrình bày hoặc là của cá nhân tôi hoặc là được tổng hợp từ nhiều nguồn tài liệu Tất cảcác tài liệu tham khảo đều có xuất xứ rõ ràng và được trích dẫn hợp pháp
Tôi xin hoàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quy định cholời cam đoan của mình
Hà Nội, ngày 20 tháng 05 năm 2013
Học viên
Nguyễn Bình Minh
Trang 4Do những vấn đề cấp thiết được đề cập ở trên nên em chọn đề tài: “Khai thác dữliệu trên Web và xây dựng ứng dụng hỗ trợ nhập liệu” Mục tiêu của đề tài nhằm đưa
ra phương pháp cũng như công cụ có khả năng hỗ trợ con người trong những bài toán
có yêu cầu thu thập dữ liệu, giúp giảm thời gian và sức lực của con người nhưng vẫnđảm bảo tính toàn vẹn của dữ liệu
Trang 5MỤC LỤC
MỞ ĐẦU 9
CHƯƠNG 1 TỔNG QUAN VỀ KHAI THÁC DỮ LIỆU TRÊN WEB 11
1.1 TÌM HIỂU CÁC KIẾN THỨC TỔNG QUAN 11
1.1.1 WORLD WIDE WEB 11
1.1.2 TRÌNH THU THẬP DỮ LIỆU WEB – WEB CRAWLER 12
1.1.3 TRÌNH BÓC TÁCH VÀ TRÍCH XUẤT THÔNG TIN – WEB SCRAPER 13
1.1.4 PHÂN LOẠI WEB 14
1.1.4.1 Phân loại dựa vào sự thể hiện của tính động 14
1.1.4.2 Phân loại dựa vào cách thức tạo ra tính động 15
1.1.4.3 Khả năng của các web crawler 15
1.2 CÁC CHIẾN LƯỢC THU THẬP DỮ LIỆU 16
1.2.1 CHIẾN LƯỢC THU THẬP DỮ LIỆU THEO CHIỀU SÂU 17
1.2.2 CHIẾN LƯỢC THU THẬP DỮ LIỆU THEO CHIỀU RỘNG 18
1.3 ĐÁNH GIÁ SƠ BỘ 18
CHƯƠNG 2 PHÂN TÍCH VÀ THIẾT KẾ ỨNG DỤNG 21
2.1 CÁC KIẾN THỨC NỀN TẢNG VÀ CÔNG NGHỆ LIÊN QUAN 21
2.1.1 HTML 21
2.1.2 XML 22
2.1.3 XHTML 23
2.1.3.1 Tính chuẩn của một tài liệu XML (well-formed) 23
2.1.3.2 Tên các phần tử và tên các thuộc tính phải ở dạng chữ in thường 24
2.1.3.3 Các thẻ không rỗng bắt buộc phải có thẻ đóng 24
2.1.3.4 Các thuộc tính luôn phải ghi rõ giá trị 24
2.1.3.5 Các phần tử rỗng 25
2.1.4 XPATH 25
Trang 62.1.4.1 Cú pháp và ngữ nghĩa 25
2.1.4.2 Axis specifier 27
2.1.4.3 Node test 28
2.1.4.4 Predicate 28
2.1.4.5 Các hàm và toán tử 28
2.1.5 CÁC THƯ VIỆN HỖ TRỢ 29
2.1.5.1 HTML Tidy 29
2.1.5.2 cURL 31
2.2 PHÂN TÍCH 32
2.2.1 PHÁT BIỂU BÀI TOÁN 32
2.2.2 PHÂN LOẠI CÁC TRANG WEB DỰA TRÊN CÁCH CHUYỂN TRANG 35
2.2.3 ĐỀ XUẤT GIẢI PHÁP 37
2.3 THIẾT KẾ ỨNG DỤNG 41
2.3.1 SƠ ĐỒ USE CASE 41
2.3.2 KIẾN TRÚC ỨNG DỤNG 42
2.3.2.1 Thành phần front-end 43
2.3.2.2 Thành phần back-end 44
CHƯƠNG 3 HIỆN THỰC ỨNG DỤNG VÀ ĐÁNH GIÁ KẾT QUẢ 48
3.1 ĐẶC TẢ DỮ LIỆU ĐẦU VÀO BẰNG XML 48
3.1.1 ĐẶC TẢ THÔNG TIN CHUNG CHO ROBOT 48
3.1.2 ĐẶC TẢ CÁC TRANG 49
3.1.3 ĐẶC TẢ BẢNG CƠ SỞ DỮ LIỆU 54
3.2 CẤU TRÚC CƠ SỞ DỮ LIỆU 56
3.3 SƠ ĐỒ TUẦN TỰ CHO CÁC CHỨC NĂNG 57
3.3.1 BOT MANAGER 57
3.3.2 ROBOT 58
Trang 73.3.2.1 Quản lý tiến trình của Robot 59
3.3.2.2 Thực hiện quy trình thu thập dữ liệu 60
3.3.3 CRAWLER 62
3.3.3.1 Simple Crawler 63
3.3.3.2 Advanced Crawler 63
3.3.4 EXTRACTOR 67
KẾT LUẬN 69
TÀI LIỆU THAM KHẢO 70
Trang 8MỤC LỤC HÌNH ẢNH
Hình 1-1 World Wide Web 11
Hình 1-2 Sơ đồ hoạt động của một web crawler đơn giản 12
Hình 1-3 Phân loại web cùng khả năng của các web crawler 16
Hình 2-1 Một trang web danh bạ 33
Hình 2-2 Sơ đồ Use Case của ứng dụng DESS 41
Hình 2-3 Sơ đồ các trạng thái của Bot 43
Hình 2-4 Quá trình hoạt động tổng quát của ROBOT 45
Hình 3-1 Sơ đồ cấu trúc cơ sở dữ liệu của chương trình 56
Hình 3-2 Sơ đồ tuần tự của tác vụ start Bot 57
Hình 3-3 Sơ đồ tuần tự của tác vụ resume Bot 57
Hình 3-4 Sơ đồ tuần tự của tác vụ pause Bot 58
Hình 3-5 Sơ đồ tuần tự của tác vụ stop Bot 58
Hình 3-6 Sơ đồ tuần tự thể hiện quá trình hoạt động tổng quát của Robot 59
Hình 3-7 Quá trình thu thập dữ liệu tổng quát 61
Hình 3-8 Sơ đồ class của các Crawler 62
Hình 3-9 Sơ đồ tuần tự hoạt động của Simple Crawler 63
Hình 3-10 Sơ đồ tuần tự hoạt động của Advanced Crawler 63
Hình 3-11 Sơ đồ class của các Extractor 67
Trang 9MỞ ĐẦU
Trong thập kỷ qua, chúng ta đã được chứng kiến sự phát triển đến chóng mặt củaInternet mà tiêu biểu là các trang thông tin Internet đã và đang được coi là một nguồncung cấp tin khổng lồ với mọi chuyên mục, mọi vấn đề mà người sử dụng cần đến.Với sự phát triển này, lượng thông tin từ Internet mang đến cho người sử dụng là quálớn dẫn tới việc chúng ta cần phải có các ứng dụng Internet thông minh và hiệu quảhơn đối với người sử dụng Tuy nhiên nếu lượng thông tin mà họ cần khai thác là quánhiều thì quá trình duyệt web, trích xuất và lưu trữ theo cách thủ công lại trở thànhmột công việc khó khăn, hao tốn nhiều sức lực, thời gian của con người Một số ví dụ
có thể kể ra như: nhu cầu trích xuất thông tin về tất cả các mặt hàng thuộc một chuyênmục của một website bán hàng nào đó nhằm phục vụ mục đích khảo sát thị trường,nhu cầu tổng hợp tin tức từ các website tin tức để xây dựng các trang web thông tintổng hợp, nhu cầu thu thập thông tin về các doanh nghiệp thuộc một ngành nào đó trênwebsite danh bạ doanh nghiệp để gửi email quảng cáo, tiếp thị, v.v… Chính những ví
dụ thực tế như trên đã nảy sinh ra nhu cầu: cần phải có một phương thức hoặc công cụnào đó có khả năng tìm kiếm, trích xuất thông tin trên web và lưu trữ lại thông tin đótheo ý muốn của con người, một cách tự động và hiệu quả, và đó cũng chính là mụctiêu được đặt ra cho đề tài này Đó là: Tìm hiểu phương pháp khai thác lượng dữ liệutrên, từ đó xây dựng được một ứng dụng thu thập dữ liệu tự động từ các website, phục
vụ cho các nhu cầu của cá nhân hay tổ chức
Các nhiệm vụ:
Tìm hiểu về các kiến thức nền tảng
Tìm hiểu về các kỹ thuật khai thác dữ liệu tự động từ các website
Tìm hiểu về các công nghệ liên quan và xây dựng ứng dụng khai thác dữ liệutrên một website cụ thể
Bố cục của luận văn:
Mở đầu: Đặt vấn đề về ý nghĩa , tính cấp thiết, nhiệm vụ và tính thực tiễn của đề
tài
Trang 10Chương 1: Tổng quan về khai thác dữ liệu trên Web
Trong chương này, chúng ta sẽ tìm hiểu các khái niệm cơ bản về trình thu thậpweb (web crawler), các chiến lược thu thập dữ liệu, trình bóc tách và trích xuất thôngtin (web scraper), sự phân loại các trang web, từ đó vẽ ra bức tranh chung về khai thác
dữ liệu trên web để hiểu hơn về các giá trị thực tiễn mà nó mang lại trong đời sống conngười
Chương 2: Phân tích, thiết kế ứng dụng
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ênquan, ở phần tiếp theo nêu phát biểu cho bài toán khai thác dữ liệu trên web cũng nhưgiải pháp thực hiện, kiến trúc thành phần của ứng dụng
Chương 3: Hiện thực ứng dụng và đánh giá kết quả thu được
Đặc tả thông tin đầu vào cho ứng dụng, lược đồ cơ sở dữ liệu tương ứng và chứcnăng của các module trong chương trình Phần tiếp theo trình bày ví dụ cụ thể và kếtquả thu được khi thực hiện ứng dụng
Kết luận: Phần cuối của luận văn sẽ nhìn lại những điều đã làm được, nêu lên
những hạn chế, từ đó đề ra hướng phát triển sau này
Trang 11CHƯƠNG 1 TỔNG QUAN VỀ KHAI THÁC DỮ LIỆU TRÊN WEB
1.1 WORLD WIDE WEB
World Wide Web (WWW, hay gọi tắt là Web) là một ứng dụng phổ biến và pháttriển mạnh mẽ nhất của Internet hiện nay World Wide Web là một mạng lưới bao gồmcác tài liệu siêu văn bản (hypertext) được đặt trên các máy tính nằm trong mạngInternet [1] Các siêu văn bản này có khả năng liên kết lẫn nhau thông qua các siêuliên kết (hyperlink) Sử dụng một trình duyệt web (web browser), con người có thểxem được các trang web (web page, cũng chính là một siêu văn bản) trên màn hìnhmáy vi tính, nội dung các trang web có thể có chữ, hình ảnh, video, thậm chí có thểtương tác với người sử dụng thông qua các thiết bị như bàn phím, chuột Cũng chínhnhờ các hyperlink mà các trang web có thể liên kết được với nhau thông qua chỉ một
cú click chuột, đây là khả năng đem lại sự mở rộng vô cùng lớn cho world wide web
Hình 1-1 World Wide Web
Nội dung các trang web chủ yếu được viết bằng ngôn ngữ HTML hoặc XHTML.Khi muốn truy cập một trang web, trình duyệt web sẽ gửi yêu cầu đến máy chủ (webserver) chứa trang web đó Máy chủ sẽ hồi đáp bằng nội dung trang web được yêu cầutrong trường hợp trang web đó thật sự tồn tại trên máy chủ và được cho phép truy cập
Cả hai quá trình yêu cầu và hồi đáp này đều được thực hiện dựa trên giao thức HTTP(Hyper Text Transfer Protocol)
Trang 121.2 TRÌNH THU THẬP DỮ LIỆU WEB – WEB CRAWLER
Một Web Crawler là một chương trình máy tính có thể “duyệt web” một cách tự
động và theo một phương thức nào đó được xác định trước [1] Vì là một chương trìnhnên quá trình “duyệt web” của các web crawler không hoàn toàn giống với quá trìnhduyệt web của con người (web crawler phải sử dụng các phương thức dựa trên HTTPtrực tiếp chứ không thông qua web browser như con người) Các web crawler thườngbắt đầu với một danh sách URL của các web page để ghé thăm đầu tiên Khi ghé thămmột URL, crawler sẽ đọc nội dung web page, tìm tất cả các hyperlink có trong webpage đó và đưa các URL được trỏ tới bới các hyperlink đó vào danh sách URL Dựavào danh sách URL này, Crawler lại tiếp tục quá trình duyệt đệ quy để ghé thăm tất cả
các URL chưa được duyệt đến Quá trình này được gọi là web crawling hoặc là web spidering, các web crawler còn được gọi là các robot (bot) hoặc nhện web (web
spider) Thường thì các crawler được tạo ra để phục vụ cho một mục đích, tác vụ nào
đó Ví dụ các máy tìm kiếm (search engine) sử dụng crawler để tải các web page, cácweb page này sau đó được search engine đánh chỉ mục để có thể cho kết quả nhanhhơn khi được tìm kiếm
Hình 1-2 Sơ đồ hoạt động của một web crawler đơn giản
Về bản chất, web crawling chính là quá trình duyệt đệ quy một đồ thị cây có cácnode là các web page Tùy thuộc vào chiến lược của crawler, các node có thể đượcduyệt theo chiều sâu hoặc duyệt theo chiều rộng Trong thực tế, quá trình crawlingweb sẽ phải đối diện với rất nhiều vấn đề khó khăn như: kích thước khổng lồ củaworld wide web, các trang web HTML được viết không chuẩn, hạn chế ghé thăm một
Trang 13URL đã được ghé thăm trước đó, các trang web động, nội dung các trang web đượccập nhật thường xuyên v.v…
1.3 TRÌNH BÓC TÁCH VÀ TRÍCH XUẤT THÔNG TIN – WEB SCRAPER
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 thuthập và lưu trữ lại, chính vì thế mà các web scraper được ra đời Web Scraper là mộtthuật ngữ để chỉ các phần mềm có khả năng bóc tách và trích xuất thông tin chứa trên
các web page một cách tự động [1] Công việc này được gọi là web scraping Các web
scraper khác với web crawler ở chỗ, trong khi web crawler tập trung vào việc duyệtcác trang web thông qua các liên kết hyperlink, thì web scraper lại tập trung vào việcchuyển đổi nội dung không cấu trúc của các trang web (chủ yếu được viết bằngHTML) sang thành nội dung có cấu trúc, sau đó bóc tách, trích xuất phần thông tinmong muốn và lưu trữ lại vào các cơ sở dữ liệu hoặc spreadsheet Các web scrapercũng có thể thực hiện thêm các công đoạn phân tích dữ liệu sau khi đã trích xuất được
để phục vụ cho một mục đích nào đó Một số ứng dụng của web scraping bao gồm: sosánh giá cả thị trường trực tuyến, nghiên cứu thị trường, thu thập thông tin để thống
kê, theo dõi thông tin thời tiết trên các website dự báo thời tiết, tổng hợp tin tức từnhiều website v.v…
Một số kỹ thuật được sử dụng trong web scraping có thể kể ra như:
So trùng: một kỹ thuật đơn giản nhưng khá hiệu quả để tìm kiếm các phần nộidung chữ có sự tương đồng với nhau (do nội dung trang web chủ yếu là ở dạng
ký tự) Kỹ thuật này thường sử dụng regular expression (biểu thức chính quy)
để so trùng và tìm kiếm
Lập trình HTTP: ta có thể lấy được nội dung trang web bằng cách gửi một yêucầu HTTP đến web server, cũng giống như cách web browser làm Đây cũng làmột kỹ thuật được sử dụng bởi các web crawler
Trang 14 Phân tích cấu trúc DOM: phân tích nội dung HTML của web page và xây dựngmột cây DOM (Document Object Model), giúp scraper có thể duyệt các nodetrên cây này và chỉ lấy ra phần nội dung mà nó cần.
1.4 PHÂN LOẠI WEB
World Wide Web có thể được phân loại thành hai loại: các trang web tĩnh và cáctrang web động Sriram và Hector [8] đưa ra định nghĩa sau về trang web động:
“Một trang P được gọi là động nếu như một phần hoặc tất cả nội dung của nó
được sinh ra tại thời điểm chạy (tức là sau khi yêu cầu của máy khách được máy chủnhận) bởi một chương trình thực thi nằm trên máy chủ hoặc máy khách Điều này
ngược lại với một trang tĩnh P 1 , khi mà toàn bộ nội dung của P 1 đã tồn tại sẵn trên máychủ và luôn sẵn sàng được gửi cho máy khách ngay sau khi một yêu cầu được nhận.”Các trang web động có thể được phân loại theo hai tiêu chí sau: sự thể hiện vàcách thức tạo ra [8]
1.4.1 Phân loại dựa vào sự thể hiện của tính động
Theo thời gian (temporal dynamism): đây là những trang web mà nội dung của
chúng có thể được thay đổi, cập nhật theo thời gian Điều này đồng nghĩa với việc: cácyêu cầu đến cùng một trang web, khi được gửi ở hai thời điểm khác nhau có thể sẽnhận được hai nội dung khác nhau
Theo máy khách (client-based dynamism): những trang web có khả năng tùy
biến theo người sử dụng (client) sẽ được xếp vào mục này Ví dụ một trang tin tứctổng hợp có khả năng chọn lọc các tin tức khác nhau, tùy thuộc vào sở thích của người
sử dụng đang đăng nhập Những trang kiểu này thường không thể trực tiếp truy xuấtvào được mà phải vượt qua một bước xác thực danh tính (authentication)
Theo truy vấn (input dynamism): đây là những trang có nội dung phụ thuộc vào
truy vấn của người sử dụng Một ví dụ điển hình là những trang có các mẫu nhập liệu(form), chẳng hạn một trường nhập liệu để tìm kiếm một hoặc nhiều món hàng trong
cơ sở dữ liệu của trang web Những trang kiểu này cũng không luôn luôn truy xuấttrực tiếp được (tùy thuộc vào phương thức truyền các tham số - GET hoặc POST – chi
Trang 15tiết về vấn đề này sẽ được phân tích ở phần 4), các trang kết quả nhận được cũngthường có số lượng rất lớn (tùy thuộc số tổ hợp của các tham số truy vấn) Đây cũngthường là những trang web không thể crawl được hoàn toàn bởi các crawler, và đượcgọi là Web ẩn (hidden Web, deep Web, invisible Web).
1.4.2 Phân loại dựa vào cách thức tạo ra tính động
Thực thi các chương trình nằm trên máy chủ (server-side programs): Trong kỹ
thuật này, một chương trình sẽ được thực thi trên máy chủ và sinh ra toàn bộ nội dungHTML của trang web, sau đó được gửi đến máy khách yêu cầu Ví dụ tiêu biểu choloại này là CGI hoặc Java Servlet Những chương trình phía máy chủ này cũng thườngđược dùng để xử lý các truy vấn từ người sử dụng
Nhúng mã với sự thực thi phía máy chủ (embedded code with server-side
execution): các trang web động sẽ chứa cả nội dung HTML tĩnh cùng với các đoạn mãđược nhúng vào cùng với HTML Khi một yêu cầu được nhận, các đoạn mã nhúng này
sẽ được thực thi trên máy chủ và sẽ sinh ra các đoạn code HTML thay thế cho chúng
Kỹ thuật này khác kỹ thuật trên ở chỗ không phải toàn bộ mà chỉ một phần nội dungHTML được sinh động Các mã nhúng này có thể là PHP, Java Scriplet, ASP hoặc các
mã server-side khác
Nhúng mã với sự thực thi phía máy khách (có thể có cả sự thực thi ở phía máy
chủ) (embedded code with client-side execution): Với ký thuật này thì các đoạn mãđược nhúng không chạy trên server mà chúng được máy khách tải về và được thực thitrên máy khách Nếu mã chỉ chạy trên máy khách thì đó có thể là JavaScript, JavaApplet hoặc Flash Nếu vừa có sự thực thi ở máy khách và cả ở máy chủ thì đó chính
là Ajax, trong trường hợp này mã clien-side có thể trao đổi thông tin với server thôngqua một đối tượng đặc biệt là XMLHttpRequest để có thể thay đổi nội dung trang webmột cách động mà không cần load trang web mới
1.4.3 Khả năng của các web crawler
Nhìn chung, các web crawler hiện nay hầu hết đều chỉ có thể crawl một phần rấtnhỏ của World Wide Web, đó là những trang web có thể đến được bằng cách đi theocác liên kết hyperlink Các crawler này thường phải bỏ qua các trang có tính động theo
Trang 16máy khách (client-based dynamism) và theo truy vấn (input dynamism) Cũng đã có
một vài công trình nghiên cứu xây dựng các hidden-web crawler như HiWE [8], tuy
nhiên đây không phải một vấn đề tầm thường và cũng vẫn còn đang được tiếp tụcnghiên cứu và phát triển Hình 1 cho thấy cái nhìn tổng quan về sự phân loại các trangweb tĩnh - động, cùng với khả năng của các web crawler (thương mại) hiện nay
Thể hiệnCách thức
Nội dungtĩnh
Nội dung độngThời gian Client-based Truy vấn
Trang tĩnh hoàn toàn Không cần xét vì trang tĩnh hoàn toàn không thể
tạo ra nội dung độngChương trình thực thi
xét vì nộidung đã làtĩnh
Hình 1-3 Phân loại web cùng khả năng của các web crawler
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[12]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
Như đã nói ở phần trước về bản chất, quá trình thu thập web chính là quá trìnhduyệt đệ quy một đồ thị Các website được xem như một đồ thị với các trang là các
Trang 17đỉ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ántì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ằngcá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ằngcách mở rộng nút đồ thị theo chiều rộng
2.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 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.
2.2 CHIẾN LƯỢC THU THẬP DỮ LIỆU THEO CHIỀU RỘNG
Quá trình thực hiện:
Trang 18Bướ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 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 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.
Ngồi 2 chiến lược kể trên cịn phải kể đến các chiến lược thu thập dữ liệu khácnhư: Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ (Nạve Best-First),tìm kiếm tham ăn (Shark Search) Chúng sử dụng thuật tốn tìm kiếm theo quy tắc tínhđiểm số cho các URL dựa trên các tiêu chí để đánh giá độ quan trọng của một trangweb như là: từ khĩa, thẻ title và meta, số lượng liên kết ngồi Các chiến lược kể trênkhơng thuộc phạm vi nghiên cứu của đề tài
Cĩ thể thấy được rằng, ứng dụng mà đề tài cần xây dựng chính là một chươngtrình vừa cĩ thể crawl web một cách tự động, vừa cĩ khả năng bĩc tách, trích xuất dữliệu như một web scraper Từ đĩ cĩ thể hình dung ứng dụng sẽ gồm 2 module chính:crawler module và data extractor module Crawler module sẽ giúp ứng dụng “duyệt”nhiều trang web tương tự một cách tự động (ví dụ các trang phân trang của cùng mộttrang danh mục), với mỗi trang web được duyệt qua crawler module sẽ tải nội dung
Trang 19trang web về và lưu trữ tạm Nội dung trang web sau đó được chuyển cho dataextractor module, data extractor module có nhiệm vụ phân tích, xử lý nội dung trangweb, chuyển đổi nó sang một cấu trúc trung gian nào đó để thuận tiện cho việc sửdụng trong bước nhập liệu.
Ứng dụng phải có tính tùy biến cao, phục vụ cho các mục đích cụ thể chứ khôngnhư các web crawler của các search engine (crawl phần Web nổi để đánh index), nhưvậy ứng dụng phải hỗ trợ được cả (một) phần Web ẩn Vì phải phục vụ cho các mụcđích cụ thể nên ứng dụng cũng cần được “dẫn đường” bởi người sử dụng
Thành phần data extractor của ứng dụng sẽ không có nhiều khác biệt với các webscraper khác Ứng dụng phải có thể bóc tách, trích xuất các dữ liệu (có sự tương đồng,
do người sử dụng đặc tả) một cách tự động
Ngoài ra, trong lĩnh vực trích xuất thông tin (Information Retrieval, [1]) cũng cómột hướng nghiên cứu khác khá gần gũi với lĩnh vực khai phá dữ liệu (data mining) vàtrí tuệ nhân tạo (artificial intelligence) Hướng nghiên cứu này sẽ xây dựng, phát triển
các công cụ có khả năng tự động crawl và trích xuất thông tin một cách hoàn toàn tự động, không cần hoặc cần rất ít sự can thiệp của con người, và hơn nữa các công cụ
này còn có khả năng tự học (machine learning) thông qua các dữ liệu mẫu [11], nhờ đó
nó có thể ứng dụng được trên nhiều loại trang web có cấu trúc khác nhau một cách tựđộng Ưu điểm của hướng tiếp cận này là tính tự động cao, có thể chạy được trênnhiều website khác nhau (cùng lĩnh vực) một cách tự động Tuy nhiên các công cụkiểu này thường chỉ có thể sử dụng cho các lĩnh vực cụ thể và phổ biến (domain-specific), chẳng hạn như lĩnh vực tin tức trực tuyến
Vì lý do hạn chế về thời gian nên đề tài luận văn này sẽ không đi theo hướng này.Hướng tiếp cận của đề tài sẽ là xây dựng một ứng dụng có khả năng giải quyết các vấn
đề trích xuất thông tin rất rời rạc và cụ thể Ứng dụng cũng sẽ được xây dựng như một
framework có khả năng mở rộng được, tùy biến được bởi người sử dụng, để có thể sử
dụng cho nhiều loại website khác nhau, nhược điểm là mỗi khi sử dụng ứng dụng chomột website có cấu trúc khác, người sử dụng sẽ phải đặc tả lại các thông số đầu vào
Trang 20CHƯƠNG 2 PHÂN TÍCH VÀ THIẾT KẾ ỨNG DỤNG
4.1 HTML
HTML (HyperText Markup Language – ngôn ngữ đánh dấu siêu văn bản) là mộtngô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 WorldWide Web Consortium (W3C) duy trì và là ngôn ngữ đánh dấu cốt lõi của WorldWide Web Phiên bản mới nhất của nó hiện là HTML 4.01 Tuy nhiên HTML hiệnkhông còn được phát triển tiếp mà người ta đã thay thế nó bằng XHTML – một chuẩnHTML 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ưngphần lớn các trang web hiện nay vẫn được viết bằng HTML, bởi nhiều nguyên nhânkhác nhau (sử dụng các công cụ soạn thảo HTML cũ, người viết code ngại thay đổiv.v…)
Một tài liệu HTML được tạo nên bởi các phần tử HTML Một cách tổng quát,một phần tử HTML 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 phần tử HTML là mọi thứnằm giữa hai thẻ đầu cuối, tính cả hai thẻ này Một thẻ HTML đơn giản là một từ khóađược đặt giữa một cặp hai dấu bé hơn (<) và lớn hơn (>) Thẻ đóng của một phần tửHTML luôn có một ký tự “/” ngay sau ký tự “<” Sau đây là một ví dụ của một phần tửHTML ở dạng tổng quát nhất:
<tag attribute1=”value1” attribute2=”value2”>nội dung</tag>
Có bốn loại phần tử đánh dấu trong HTML:
Đánh dấu có cấu trúc miêu tả mục đích của phần văn bản (ví dụ,
<h1>Football</h1> sẽ điều khiển phần mềm đọc hiển thị “Football” là tiêu đềcấp một)
Trang 21 Đá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ụ <b>in đậm</b> 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, đây chính
là các phần tử thể hiện các liên kết hyperlink (ví dụ <a href=”http://www.dantri.vn/”>Dan Tri</a> sẽ hiển thị từ Dan Tri nhưmột liên kết ngoài đến website www.dantri.vn)
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
HTML là ngôn ngữ không phân biệt hoa thường (hai thẻ <td> và <TD> đề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àykhông luôn luôn đúng, có nhiều phần tử không cần thẻ đóng, ví dụ các thẻ <br>, <hr>
và <li> Ngoài ra khi lồng nhau, các phần tử HTML cũng không cần thiết phải lồngnhau 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:
<p>đoạn văn này được <b>in đậm</p></b>
Sự lồng nhau không đúng thứ tự của các phần tử HTML được gọi là overlapping
(phủ lên nhau), mặc dù điều này không được phép trong đặc tả SGML, nhưng lại đượcchấp nhận bởi hầu hết các trình duyệt hiện nay
Từ các đặc điểm trên ta có thể nhận thấy HTML không phải là một ngôn ngữ có
cú pháp chặt chẽ, các đặc điểm như không cần đóng thẻ hoặc không cần lồng nhauđúng thứ tự sẽ là các trở ngại cho công việc đọc và phân tích văn bản HTML (HTMLparsing), đặc biệt nếu sử dụng phương pháp tìm kiếm so trùng Chính vì vậy, chúng tacần phải chuyển đổi nội dung viết bằng HTML sang một định dạng ngôn ngữ khác có
sự chặt chẽ hơn về cú pháp, điều này sẽ đem lại thuận lợi hơn cho quá trình xử lý vềsau Một ngôn ngữ đánh dấu được định nghĩa ra để thay thế cho HTML đó chính làXHTML
4.2 XML
XML (Extensible Markup Language – ngôn ngữ đánh dấu mở rộng) là một ngônngữ đánh dấu mà người sử dụng có thể tự tạo ra các thẻ riêng của mình Giống như
Trang 22HTML, XML cũng được dựa trên SGML Tuy nhiên, XML được thiết kế nhằm mụcđích truyền tải và lưu trữ thông tin, trong khi HTML tập trung vào việc thể hiện thôngtin đó như thế nào Về tính cấu trúc của nội dung, XML có thể dùng để định nghĩa cáccấu trúc ngẫu nhiên tùy ý trong khi HTML hoàn toàn bị giới hạn.
Ví dụ của một tài liệu XML đầy đủ:
Theo tổ chức W3C, khác biệt giữa XHTML 1.0 và HTML 4 về cơ bản thìXHTML phải là một tài liệu XML chuẩn (well-formed), trong khi HTML không cầnphải thỏa điều kiện này Cụ thể, một số điểm khác biệt như sau [2]:
4.3.1 Tính chuẩn của một tài liệu XML (well-formed)
XHTML đòi hỏi các tài liệu viết bằng XHTML phải có tính chất well-formed, có
nghĩa là tất cả các thẻ trong tài liệu đều phải có thẻ đóng tương ứng (ngoại trừ các thẻrỗng được trình bày cụ thể ở phần sau) và các phần tử phải lồng nhau một cách đúngthứ tự (thẻ nào mở trước thì phải đóng sau) Ví dụ:
Đúng: các phần tử lồng nhau đúng thứ tự.
<p>một đoạn văn được <em>in nghiêng</em>.</p>
Sai: các phần tử lồng nhau không đúng (overlap).
<p>một đoạn văn được <em>in nghiêng </p></em>
Trang 234.3.2 Tên các phần tử và tên các thuộc tính phải ở dạng chữ in thường
XHTML thừa kế các đặc tính của XML, trong đó có sự phân biệt chữ hoa chữthường (ví dụ <td> và <TD> là hai thẻ khác nhau), vì vậy để chuẩn hóa, tên của tất cảcác phần tử cũng như tất cả các thuộc tính của phần tử cần được viết dưới dạng chữthường
4.3.3 Các thẻ không rỗng bắt buộc phải có thẻ đóng
Trong HTML 4, một số phần tử được phép viết không cần thẻ đóng Tuy nhiênXML không cho phép điều này Tất cả các phần tử đều phải có thẻ đóng tương ứngngoại trừ các phần tử được định nghĩa trong DTD là EMPTY (các phần tử này có thể cóthẻ đóng đầy đủ hoặc được viết ở dạng tắt) Ví dụ:
Đúng: các phần tử đều có thẻ đóng.
<p>đây là đoạn văn đầu tiên.</p><p>đây là đoạn văn thứ hai.</p>
Sai: các phần tử không có thẻ đóng.
<p>đây là đoạn văn đầu tiên.<p>đây là đoạn văn thứ hai.
Giá trị của các thuộc tính luôn được bọc bởi cặp dấu ngoặc kép
Đúng: giá trị thuộc tính nằm trong ngoặc kép.
<td rowspan=”3”></td>
Sai: giá trị thuộc tính không nằm trong ngoặc kép.
<td rowspan=3></td>
4.3.4 Các thuộc tính luôn phải ghi rõ giá trị
Các thuộc tính của phần tử phải được viết dưới dạng tên=”giá trị” đầy đủ Vídụ:
Đúng:
<input checked=”checked”></dl>
Sai:
<input checked></dl>
Trang 24Các ký tự khoảng trắng đứng trước và sau giá trị của thuộc tính đều được bỏ qua.
4.4 XPATH
Xpath - XML Path - là một ngôn ngữ truy vấn được định nghĩa bởi W3C, sửdụng để truy vấn các node hoặc tính toán các giá trị lấy trong một tài liệu XML [1].Một tài liệu XML được xem như là một sự thể hiện của cấu trúc phân cấp ở dạng câycủa nhiều phần tử, mỗi phần tử được xem như là một node của cây, XPath đem lại khảnăng duyệt các node trên cây hoặc lựa chọn chúng theo các tiêu chí nào đó, dựa trêncác mối quan hệ như cha - con, tổ tiên - con cháu Một biểu thức XPath (Xpathexpression) có thể chọn một node hoặc một tập hợp các node, hoặc nó có thể trả lạimột giá trị dữ liệu dựa trên một hoặc nhiều node trong tài liệu XPath hiện có 2 phiênbản là XPath 1.0 và XPath 2.0
4.4.1 Cú pháp và ngữ nghĩa
Một biểu thức XPath có thể là một đường dẫn vị trí (location path), đây là loại
biểu thức quan trọng nhất trong XPath Một location path bao gồm một hoặc nhiềubước (location step) Mỗi bước gồm có 3 thành phần sau:
một axis specifier (chỉ định hướng)
một node test
Trang 25 một hoặc nhiều predicate
Biểu thức XPath luôn được đánh giá một cách tương đối đối với một node ngữcảnh (context node) Một chỉ định hướng (axis specifier) “child” sẽ cho biết hướng dichuyển (để tìm kiếm) sẽ là hướng đến các node con của node ngữ cảnh Node test vàpredicate sẽ dùng để lọc các node thu được một cách chi tiết hơn Ví dụ node test “A”đòi hỏi tất cả các node nhận được phải có tên là “A” Một predicate dùng để chỉ ra cácnode này phải có một số đặc điểm nào đó nữa Cú pháp của biểu thức XPath cũng cóthể ở hai dạng: rút gọn và đầy đủ
Một biểu thức phức tạp hơn:
A//B/*[1]
Biểu thức này chọn ra phần tử có tên tùy ý và phải là phần tử đầu tiên (“[1]”)trong các phần tử con của phần tử B, phần tử B này phải là con hoặc cháu chắt (“//”)của một phần tử A nào đó, phần tử A này lại là con của node ngữ cảnh (do biểu thức
Trang 26không bắt đầu bởi “/”) Nếu phần tử A có nhiều node con cháu cùng tên B thì biểuthức này sẽ trả về một tập các node con đầu tiên của các phần tử B này.
attribute @ @abc là viết tắt của attribute::abc
descendant
descendant-or-self // //B là viết tắt của
descendant-or-self::node()/child::B following
following-sibling
namespace
A/parent::node()/child::B preceding
Trang 27 text(): tìm một node có kiểu là text, ví dụ hello trong <a>hello<b> world</b></a>
processing-instruction(): tìm các chỉ dẫn xử lý của XML, ví dụ instruction(‘php’)sẽ trả về node<?php echo $a; ?>
processing- node(): tìm bất kỳ node nào
4.4.4 Predicate
Một step của biểu thức XPath có thể có nhiều predicate Mỗi predicate cũng đượcviết dưới dạng biểu thức và nằm trong cặp ngoặc vuông [ ], các node nhận được củabiểu thức sẽ phải thỏa điều kiện của các predicate Ví dụ a[@href=’help.php’] sẽchỉ trả về các phần tử có tên là a (trong các node con của node ngữ cảnh) và có mộtthuộc tính href với giá trị help.php Các predicate có thể trả về giá trị boolean, sốnguyên, hoặc một tập các node Nếu giá trị trả về của predicate là số nguyên thì giá trịnày được hiểu là vị trí của node cần tìm, ví dụ p[1] trả về phần tử p đầu tiên,
p[last()] trả về phần tử p cuối cùng Trong trường hợp trả về một tập node thì khitập node khác rỗng giá trị sẽ được hiểu là true, ví dụ p[@id] trả về các node p cóthuộc tínhid
4.4.5 Các hàm và toán tử
XPath 1.0 định nghĩa 4 kiểu dữ liệu: kiểu tập node (node-set), kiểu chuỗi ký tự(string), kiểu số (number) và kiểu logic (boolean)
Các toán tử phổ biến được dùng trong XPath:
Toán tử hội “|“ để tìm hội của hai tập node
Toán tử logic “and” và “or” (và một hàm not(boolean) để phủ định một biểuthức boolean)
Các toán tử cộng trừ nhân chi “+”, “-“, “*”, “div” và “mod”
Các toán tử so sánh “=”, “!=”, “<”, “>”, “<=”, “>=”
Các hàm phổ biến trong thự viện hàm của XPath 1.0:
Trang 28 position(): trả về giá trị kiểu số thể hiện vị trí của node trong một chuỗi cácnode.
count(node-set): trả về số node có trong node-set.
string(object?): chuyển bất kỳ kiểu dữ liệu nào thành kiểu chuỗi Nếu tham số
là kiểu set thì hàm này trả về giá trị chuỗi của node đầu tiên trong set (theo thứ tự xuất hiện trong tài liệu)
node- contains(s1, s2): trả vềtruenếu s1 chứa s2
true(), false(): trả về các giá trịtrue, falsetương ứng
Trang 29 Thêm các thẻ đóng bị thiếu và sửa các thẻ đóng không khớp
<b>bold <i>bold italic</i> bold</b>
Sửa các thẻ đặt không rõ ràng, trộn lẫn vào nhau
<i><h1>heading</h1></i>
<p>new paragraph <b>bold text
<p>some more bold text
sẽ được chuyển thành
<h1><i>heading</i></h1>
<p>new paragraph <b>bold text</b>
<p><b>some more bold text</b>
Trang 30<a href=”#ref”>References</a>
Bổ sung các thẻ đóng bị thiếu trong các danh sách
<body>
<li>1st list item
<li>2nd list item
sẽ được chuyển thành
<body>
<ul>
<li>1st list item</li>
<li>2nd list item</li>
Trang 315 PHÂN TÍCH
5.1 PHÁT BIỂU BÀI TOÁN
Xem xét mô hình tổng quát của một website cung cấp danh bạ về các doanhnghiệp trong nhiều lĩnh vực Danh bạ này có thể được chia làm nhiều mục lớn(category) về các lĩnh vực lớn, trong mỗi category lại phân ra làm nhiều phân mục nhỏ(sub-category) về các lĩnh vực nhỏ, trong mỗi sub category lại phân ra làm nhiều phânmục nhỏ hơn nữa, cứ thế cho đến phân mục nhỏ nhất, phân mục nhỏ nhất sẽ chứa danhsách các liên kết đến các trang chi tiết về một doanh nghiệp nào đó nằm trong phânmục này Các trang chi tiết này chính là các trang cấp thấp nhất, nội dung của trangnày sẽ chứa các thông tin mà người sử dụng website quan tâm như: tên doanh nghiệp,
mô tả về doanh nghiệp, địa chỉ liên lạc, số điện thoại, địa chỉ email v.v… Mô hình
trang web kiểu này được gọi là mô hình Master – Detail [1], trong trường hợp tổng
quát, các trang cấp N chính là trang master của trang cấp N+1 và trang cấp N+1 làtrang detail của trang cấp N, và cấp N+1 được gọi là thấp hơn cấp N Lưu ý rằng ở mỗicấp có thể sẽ có sự phân trang (pagination – danh sách các category thuộc cùng 1 cấp
sẽ không chỉ nằm trong 1 trang mà có thể nằm trong nhiều trang) Ta gọi những tranghiển thị danh sách các category lớn nhất là những trang cấp 1, từ một trong nhữngtrang cấp 1 nếu ta chọn 1 category nào đó thì sẽ dẫn đến một trang hiển thị các sub-category thuộc category đã chọn, những trang này ta gọi là những trang cấp 2, và cứthế cho đến cấp thấp nhất
Trang 32Hình 2-4 Một trang web danh bạ
Giả sử một tình huống như sau: một người sử dụng muốn thu thập các thông tin
về các doanh nghiệp nằm trong một lĩnh vực nào đó như tên doanh nghiệp, địa chỉemail, để phục vụ mục đích gửi thư quảng cáo Nếu như anh ta không có một công cụ
hỗ trợ nào thì anh ta sẽ phải thực hiện công việc thu thập thông tin này một cách thủcông Trình tự công việc anh ta phải làm có thể sẽ như sau:
1 Từ trang chủ website, anh ta lần lượt click vào các liên kết phân mục để vàođược phân mục của lĩnh vực kinh doanh mong muốn
2 Sau khi đã vào được phân mục của lĩnh vực anh ta mong muốn, anh ta sẽ thấydanh sách các doanh nghiệp thuộc lĩnh vực này được liệt kê ra Anh ta phảiclick vào đường dẫn dẫn đến trang chi tiết của doanh nghiệp đầu tiên
3 Ở trang thông tin chi tiết này (một trang cấp N, cấp thấp nhất), anh ta chọnnhững thông tin mà anh ta mong muốn (ở dạng chữ) và copy các thông tin đó,lưu vào đâu đó mà anh ta muốn, có thể là một tài liệu Microsoft Excel
4 Sau khi lấy được thông tin của doanh nghiệp này, anh ta phải trở lại trangdanh sách doanh nghiệp trước đó (trang cấp N-1) và click vào đường dẫn dẫn
Trang 33đến trang chi tiết của doanh nghiệp thứ hai Anh ta lại lặp lại công việc củabước thứ 3.
5 Nếu số doanh nghiệp thuộc lĩnh vực này quá nhiều thì danh sách các doanhnghiệp có thể sẽ bị phân thành nhiều trang, và nếu anh ta đã duyệt hết thôngtin của các doanh nghiệp nằm trong trang đầu tiên, anh ta sẽ phải chuyển sangtrang thứ hai của danh sách (cũng bằng một đường dẫn hoặc một nút dowebsite cung cấp) để tiếp tục công việc của mình
Qua một trình tự khá tổng quát của công việc thu thập thông tin như trên, ta cóthể rút ra một số nhận xét như sau:
Khi anh ta click chuột để vào các trang phân mục con, hoặc để vào trang thôngtin chi tiết, công việc này chính là để chuyển từ trang này sang trang khác Tuynhiên đối tượng trên trang web mà anh ta có thể click chuột vào được, khôngphải lúc nào cũng là một hyperlink mà đó có thể là một nút bấm hoặc một đốitượng điều khiển nào đó khác Và cũng tùy thuộc vào công nghệ sử dụng củawebsite mà không phải bao giờ chuyển trang, URL của trang mới cũng khácURL của trang cũ Trang web có thể sử dụng các đoạn mã client-side nhưJavaScript để thực hiện một HTTP POST method, postback các tham số ẩn(hidden input) để chuyển trang mà URL không bị thay đổi (công nghệASP.NET), hoặc cũng chính những đoạn mã JavaScript nhưng trang web chỉload lại phần nội dung cần thiết mà không khiến web browser phải load mộttrang mới (công nghệ Ajax [1]) Tuy nhiên mọi công nghệ vẫn phải dựa vàomột nền tảng đó là HTTP Nhờ đặc điểm này mà việc tạo ra một công cụ giả lậpđược việc “click chuột” của người duyệt Web là hoàn toàn khả thi, với điềukiện chúng ta phải cung cấp cho công cụ biết cụ thể các thông tin cần thiết như:cần chuyển đến URL nào, cần GET hoặc POST các tham số gì, hoặc cần thựcthi các đoạn mã JavaScript nào, v.v… Thư viện của cURL sẽ giúp chúng ta đạtđược một phần của các mục tiêu này
Khi đã vào được trang chi tiết chứa những thông tin mong muốn, anh ta chọncác thông tin mà anh ta mong muốn, copy-paste để lưu lại Có thể thấy rằngcông việc này khá dễ dàng đối với con người, tuy nhiên đối với máy tính lại là
Trang 34cả một vấn đề không nhỏ Các trang web được viết ra để phục vụ cho đối tượngchính là con người, các nội dung thể hiện trên trang web luôn có ngữ nghĩariêng của nó mà chỉ có con người mới có thể hiểu được Tuy nhiên, để ý mộtđiều rằng, các website tuy rằng rất đa dạng và phong phú, nhưng các trang webnằm trong cùng một website lại thường được thiết kế với một cấu trúc tương tự
nhau, gọi là web template Các web template dựa vào cách thiết kế, sắp đặt các phần tử HTML, kết hợp với Cascading Style Sheets (CSS), đem lại một cấu trúc
nhất quán cho toàn bộ website Lấy ví dụ cụ thể đối với các trang thông tin chitiết về doanh nghiệp nêu trên, các trang này sẽ thường có chung một template,tức là sự sắp xếp các thẻ HTML trong các trang này hầu hết là giống nhau, chỉ
có phần nội dung chữ bên trong các thẻ này là khác nhau vì nó thể hiện chothông tin của các doanh nghiệp riêng biệt Chính vì lý do này, khi đã có đượcnội dung của toàn bộ trang web, chúng ta hoàn toàn có thể trích xuất được phầnnội dung mong muốn, giả lập cho công việc copy-paste của anh ta, với điềukiện được cung cấp vị trí chính xác của phần dữ liệu mong muốn trong templatecủa trang web
Trên đây chỉ là một ví dụ tổng quát của bài toán thu thập dữ liệu tự động Trongthực tế sẽ có nhiều khác biệt phát sinh, ví dụ người sử dụng không chỉ mong muốntrích xuất các thông tin ở trang detail cấp thấp nhất mà anh ta còn muốn một số thôngtin ở các trang cấp cao hơn, chẳng hạn thu thập thông tin các doanh nghiệp của nhiềulĩnh vực, kèm với thông tin về lĩnh vực nằm trong trang phân mục Ứng dụng sẽ phảicung cấp khả năng trích xuất được thông tin nằm trong một hoặc nhiều trang có cấpbất kỳ, các dữ liệu trích xuất được sẽ được lưu vào cơ sở dữ liệu để tiện cho việc tracứu, sử dụng về sau
5.2 PHÂN LOẠI CÁC TRANG WEB DỰA TRÊN CÁCH CHUYỂN TRANG
Theo như cách phân loại Web ở phần 2.1.4, chúng ta có thể thấy được cái nhìntổng quan về các Web tĩnh và động, cũng như có được cái nhìn chung về khả năng vàgiới hạn hoạt động của các Web crawler, so với thành phần crawler của ứng dụng cầnxây dựng Tuy nhiên để có thể đi vào các vấn đề chi tiết, cụ thể hơn trong việc hiệnthực các kỹ thuật sử dụng bởi ứng dụng, ta cần phải phân loại lại các trang Web dựa