Xây dựng ứng dụng thu thập dữ liệu tự động từ các Website
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
Trang 2TP HỒ CHÍ MINH, 1/2010
Trang 3LỜI CAM ĐOAN
“Chúng tôi cam đoan rằng, ngoại trừ các kết quả tham khảo từ các công trình khác như
đã ghi rõ trong luận văn, các công việc trình bày trong luận văn này là do chính chúng tôi thựchiện và chưa có phần nội dung nào của luận văn này được nộp để lấy một bằng cấp ở trườngnày hoặc trường khác”
Nguyễn Trung Kiên Lê Quang Minh
Trang 4LỜI CẢM ƠN
Sau khoảng thời gian được học tập và rèn luyện tại trường Đại Học Bách KhoaTP.HCM, dưới sự chỉ bảo tận tình của các thầy cô trong các phòng khoa, nay chúng em đãgần mãn khoá học, đang trong giai đoạn hoàn thành luận văn tốt nghiệp và sắp sửa trở thànhmột người kỹ sư công nghệ thông tin có thể góp sức xây dựng cho sự phát triển xã hội, đấtnước Để được như ngày hôm nay chúng em vô cùng biết ơn tất cả các thầy cô trong KhoaKhoa Học và Kỹ Thuật Máy Tính đã tận tình giảng dạy, hướng dẫn, truyền đạt những kiếnthức, kinh nghiệm quý báu cho chúng em trong khoảng thời gian được học tập, rèn luyện tạitrường Thầy ThS Đặng Trần Trí, người đã tận tình hướng dẫn, định hướng, giúp đỡ và chỉdạy chúng em rất nhiều trong suốt quá trình thực hiện luận văn tốt nghiệp Các anh chị emsinh viên các khoá đã cùng chúng em học tập và chia sẻ kiến thức tiếp thu trong quá trình theohọc tại trường Đồng thời chúng em cũng xin gửi lời cảm ơn đến cha mẹ, anh chị, bạn bènhững người luôn đứng bên cạnh chúng em để động viên, an ủi, ủng hộ về vật chất lẫn tinhthần trong suốt khoảng thời gian qua
Với lòng biết ơn chân thành, chúng em xin gởi lời chúc sức khoẻ và những gì tốt đẹpnhất đến các thầy cô trong khoa, trong nhà trường, những bậc cha mẹ, anh chị đáng kính vàtoàn thể các bạn bè hiện đang còn học hoặc không còn học tại trường Đại Học Bách KhoaTP.HCM
Nguyễn Trung Kiên và Lê Quang Minh
Trang 5TÓM TẮT LUẬN VĂN
Với sự bùng nổ về công nghệ thông tin những năm gần đây, đặc biệt là sự phát triểnmạnh mẽ như vũ bão của Internet, cuộc sống của con người đã càng ngày càng trở nên phongphú và đa dạng hơn Kho tàng tri thức của Internet đã làm thay đổi đáng kể nhiều lĩnh vực, từhọc tập, nghiên cứu cho đến kinh doanh và thương mại Tuy nhiên con người vẫn không dừnglại, họ luôn có những khát khao tìm tòi và phát triển, đặc biệt là đối với chiếc máy tính Chiếcmáy tính cá nhân đã được ra đời để trợ giúp cho con người, và họ vẫn luôn tìm cách làm cho
nó có thể hỗ trợ được cho con người nhiều hơn nữa, thậm chí là làm thay cho con người.Trong thực tế hiện nay, lượng thông tin trên Internet càng ngày càng khổng lồ, điều nàykhiến việc sử dụng World Wide Web để khai thác thông tin hữu ích, phục vụ cho các mụcđích cá nhân luôn có những khó khăn nhất định của nó Nhất là đối với những mục đích đòihỏi phải có sự thu thập thông tin với khối lượng lớn trên Web, chẳng hạn một công ty quảngcáo muốn thu thập thật nhiều thông tin liên lạc của các doanh nghiệp trong nhiều lĩnh vực đểgửi thư quảng cáo Những công việc như thế này nếu được thực hiện thủ công bằng sức ngườithì sẽ mất rất nhiều thời gian, công sức, và chúng cũng khá tẻ nhạt do tính chất phải lặp đi lặpmột vài thao tác của việc thu thập dữ liệu
Đề tài Luận Văn Tốt Nghiệp này sẽ cố gắng giải quyết vấn đề nêu trên, bằng cách xâydựng một công cụ hỗ trợ có khả năng giúp con người trong những bài toán thu thập dữ liệu,một cách tự động Công cụ sẽ cố gắng làm thay cho con người ở một số công đoạn, giúp giảmthời gian và sức lực của con người trong việc thu thập dữ liệu từ các website Ý tưởng nàynếu thành công sẽ đem lại được rất nhiều lợi ích vì nhu cầu thu thập dữ liệu trên web hiện nay
đã trở thành một nhu cầu rất phổ biến và thiết thực
Trang 6MỤC LỤC
1 Giới thiệu 11
1.1 Mở đầu 11
1.2 Yêu cầu và mục tiêu của đề tài 11
1.2.1 Yêu cầu 11
1.2.2 Mục tiêu 12
1.3 Bố cục báo cáo 12
2 Tìm hiểu và phân tích sơ bộ 13
2.1 Tìm hiểu các kiến thức tổng quan 13
2.1.1 World Wide Web 13
2.1.2 Web Crawler 14
2.1.3 Web Scraper 15
2.1.4 Phân loại Web 16
2.1.4.1 Phân loại dựa vào sự thể hiện của tính động 16
2.1.4.2 Phân loại dựa vào cách thức tạo ra tính động 17
2.1.4.3 Khả năng của các web crawler 18
2.2 Phân tích sơ bộ 18
3 Các kiến thức nền tảng và các công nghệ liên quan 22
3.1 HTML 22
3.2 XML 23
3.3 XHTML 24
3.3.1 Tính chuẩn của một tài liệu XML (well-formed) 24
3.3.2 Tên các phần tử và tên các thuộc tính của phần tử phải ở dạng chữ in thường 24 3.3.3 Các thẻ không rỗng bắt buộc phải có thẻ đóng 24
3.3.4 Các thuộc tính luôn phải ghi rõ giá trị 25
Trang 73.3.5 Các phần tử rỗng 25
3.4 XPath 26
3.4.1 Cú pháp và ngữ nghĩa 26
3.4.1.1 Cú pháp rút gọn 26
3.4.1.2 Cú pháp đầy đủ 27
3.4.2 Axis specifier 27
3.4.3 Node test 28
3.4.4 Predicate 28
3.4.5 Các hàm và toán tử 29
3.5 Các công nghệ và thư viện hỗ trợ khác 29
3.5.1 HTML Tidy 29
3.5.2 cURL 31
4 Phân tích 33
4.1 Một ví dụ tổng quát của bài toán thu thập dữ liệu 33
4.2 Phân loại các trang Web dựa vào cách thức chuyển trang 36
4.3 Phân tích và các giải pháp 37
5 Thiết kế 41
5.1 Sơ đồ Use Case 41
5.2 Kiến trúc tổng quan 42
5.3 Thành phần FRONT 44
5.3.1 Mô hình MVC 44
5.3.2 Bot Manager 46
5.3.2.1 Các trạng thái của Bot 46
5.3.2.2 Các lệnh tạo mới, xóa, sửa thông tin Robot 48
5.4 Thành phần CORE 50
5.4.1 Crawler 51
Trang 85.4.2 Extractor 53
5.4.3 Các Helper 54
6 Hiện thực 56
6.1 Môi trường phát triển ứng dụng 56
6.2 Giao diện sử dụng của WDE 57
6.3 Đặc tả dữ liệu đầu vào bằng XML 60
6.3.1 Đặc tả thông tin chung cho Bot 60
6.3.2 Đặc tả các trang 61
6.3.3 Đặc tả bảng cơ sở dữ liệu 66
6.4 Cấu trúc cơ sở dữ liệu 67
6.4.1 Danh sách các bảng 67
6.4.2 Chi tiết các bảng 67
6.5 Front 70
6.5.1 Bot Manager 70
6.6 Core 72
6.6.1 Robot 73
6.6.1.1 Quản lý tiến trình của Robot 73
6.6.1.2 Thực hiện quy trình thu thập dữ liệu 75
6.6.2 Crawler 77
6.6.2.1 Simple Crawler: 78
6.6.2.2 Advanced Crawler: 79
6.6.2.2.1 wdeBrowser 79
6.6.2.2.2 Ví dụ 81
6.6.3 Extractor 82
6.6.3.1 Expression Extractor 82
6.6.3.2 XPath Extractor 83
Trang 96.6.3.3 Selector Extractor 83
7 Sử dụng và đánh giá 85
7.1 Các bước cơ bản để sử dụng ứng dụng 85
7.1.1 Xác định trang web cần thu thập dữ liệu 87
7.1.2 Xác định kiểu lấy dữ liệu (crawler engine) cho Robot 87
7.1.3 Xác định các tùy chọn cho Robot 87
7.1.4 Xây dựng cấu hình cụ thể cho từng trang con 88
7.1.5 Xác định cấu trúc cơ sở dữ liệu lưu trữ: 89
7.2 Các ví dụ cụ thể từ đơn giản đến phức tạp 90
7.2.1 Ví dụ 1 90
7.2.2 Ví dụ 2: 92
7.2.3 Ví dụ 3 95
8 Đánh giá chung 98
8.1 Các kết quả đạt được 98
8.2 Các hạn chế của ứng dụng 99
8.3 Hướng phát triển 100
9 Tổng kết 101
10 Tài liệu tham khảo 102
Trang 10MỤC LỤC HÌNH ẢNH
Hình 2-1 World Wide Web 13
Hình 2-2 Sơ đồ hoạt động của một web crawler đơn giản 14
Hình 2-3 Phân loại web cùng khả năng của các web crawler 18
Hình 2-4 Phạm vi của thành phần crawler của ứng dụng trong đề tài 20
Hình 4-1 Một trang web danh bạ 34
Hình 5-1 Sơ đồ Use Case của ứng dụng WDE 41
Hình 5-2 Kiến trúc tổng quan của WDE 43
Hình 5-3 Kiến trúc của thành phần FRONT 44
Hình 5-4 Mô hình MVC 45
Hình 5-5 Sơ đồ các trạng thái của Bot 46
Hình 5-6 Quá trình tạo mới một Bot 48
Hình 5-7 Quá trình chỉnh sửa một Bot 49
Hình 5-8 Quá trình xóa một Bot 49
Hình 5-9 Quá trình nhận dữ liệu đặc tả đầu vào XML 50
Hình 5-10 Kiến trúc thành phần CORE 51
Hình 5-11 Quá trình hoạt động tổng quát của ROBOT 52
Hình 5-12 Crawler gồm có 2 crawler engine là Simple và Advanced 53
Hình 5-13 Extractor gồm có 3 Extractor con 54
Hình 6-1 Giao diện chính của WDE 57
Hình 6-2 Giao diện nhập / chỉnh sửa dữ liệu đặc tả đầu vào XML 58
Hình 6-3 Giao diện quản lý hoạt động Bot và xem dữ liệu trích xuất được 59
Hình 6-4 Sơ đồ cấu trúc cơ sở dữ liệu của chương trình 67
Hình 6-5 Sơ đồ tuần tự của tác vụ start Bot 70
Hình 6-6 Sơ đồ tuần tự của tác vụ resume Bot 71
Trang 11Hình 6-7 Sơ đồ tuần tự của tác vụ pause Bot 71
Hình 6-8 Sơ đồ tuần tự của tác vụ stop Bot 72
Hình 6-9 Sơ đồ class giữa Robot - Crawler - Extractor 72
Hình 6-10 Sơ đồ tuần tự thể hiện quá trình hoạt động tổng quát của Robot 73
Hình 6-11 Quá trình thu thập dữ liệu tổng quát 76
Hình 6-12 Sơ đồ class của các Crawler 77
Hình 6-13 Sơ đồ tuần tự hoạt động của Simple Crawler 78
Hình 6-14 Sơ đồ tuần tự hoạt động của Advanced Crawler 79
Hình 6-15 Sơ đồ class của các Extractor 82
Trang 121 Giới thiệu
1.1 Mở đầu
Với sự phát triển mạnh mẽ của Internet trong những năm gần đây, đặc biệt là sự bùng nổcủa World Wide Web, con người càng ngày càng phát sinh những nhu cầu về tìm kiếm và sửdụng thông tin Những người dùng bình thường có thể tìm kiếm thông tin trên web một cách
dễ dàng nhờ vào các máy tìm kiếm (search engine), họ có thể đánh dấu (bookmark) các trangkết quả hoặc sao chép nội dung họ muốn vào một nguồn nào đó để tham khảo về sau Tuynhiên nếu lượng thông tin mà họ cần tổng hợp lại 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ành một công việc đầy khó khăn và hao tốn nhiều sứclự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ên mụ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 trangweb thông tin tổ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ên website 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ốncủa con người, một cách tự động và hiệu quả, và đó cũng chính là mục tiêu của đề tài LuậnVăn Tốt Nghiệp này
1.2 Yêu cầu và mục tiêu của đề tài
1.2.1 Yêu cầu
Đề tài: Xây dựng ứng dụng thu thập dữ liệu tự động từ các website
Con người có nhu cầu thu thập một khối lượng lớn dữ liệu từ các website để phục vụcho mục đích của mình (chẳng hạn thu thập dữ liệu về các nhà cung cấp sản phẩm thời trangtrên website Trang Vàng Việt Nam để gửi email quảng cáo) Lượng dữ liệu này nếu thu thậpbằng tay thì phải mất rất nhiều thời gian và công sức Do đó, trong đề tài này, sinh viên sẽ tìmhiểu về các kỹ thuật thu thập dữ liệu trên web một cách tự động và hiện thực một giải pháp cụthể để thu thập chúng
Trang 13Các nhiệm vụ:
Tìm hiểu về các kỹ thuật thu thập dữ liệu tự động từ các website
Hiện thực một kỹ thuật để thu thập dữ liệu trên một website cụ thể
1.2.2 Mục tiêu
Xây dựng được một ứng dụng thu thập dữ liệu tự động từ các website Ứng dụng phải
có khả năng mở rộng, tùy biến được để có thể sử dụng với nhiều website khác nhau
1.3 Bố cục báo cáo
Phần 1: Giới thiệu đề tài, yêu cầu và mục tiêu của đề tài
Phần 2: Tìm hiểu các kiến thức nền tảng và phân tích sơ bộ vấn đề đề tài đặt ra
Phần 3: Tìm hiểu các công nghệ liên quan, các kiến thức cần thiết để có thể xây dựng
và phát triển ứng dụng của đề tài
Phần 4: Phân tích chính
Phần 5: Thiết kế ứng dụng, kiến trúc các thành phần của ứng dụng
Phần 6: Hiện thực ứng dụng, các kỹ thuật sử dụng, các lưu đồ giải thuật, mã giả
Phần 7: Sử dụng, thử nghiệm thực tế và các đánh giá về kết quả thu được
Phần 8: Các hạn chế và hướng phát triển lên sau này
Phần 9: Tổng kết
Phần 10: Tài liệu tham khảo
Trang 142 Tìm hiểu và phân tích sơ bộ
Để có thể đi sâu vào các vấn đề đề tài đặt ra, trước hết chúng ta cùng tìm hiểu một sốkiến thức khái quát để có cái nhìn tổng quan về bài toán
2.1 Tìm hiểu các kiến thức tổng quan
2.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át triểnmạnh mẽ nhất của Internet hiện nay World Wide Web là một mạng lưới bao gồm các tài liệusiêu văn bản (hypertext) được đặt trên các máy tính nằm trong mạng Internet [1] Các siêu vănbản này có khả năng liên kết lẫn nhau thông qua các siêu liên kết (hyperlink) Sử dụng mộttrình duyệt web (web browser), con người có thể xem được các trang web (web page, cũngchính là một siêu văn bản) trên màn hình má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ànphím, chuột Cũng chính nhờ các hyperlink mà các trang web có thể liên kết được với nhauthô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 worldwide web
Hình 2-1 World Wide Web
Trang 15Nội dung các trang web chủ yếu được viết bằng ngôn ngữ HTML hoặc XHTML Khimuốn truy cập một trang web, trình duyệt web sẽ gửi yêu cầu đến máy chủ (web server) chứatrang web đó Máy chủ sẽ hồi đáp bằng nội dung trang web được yêu cầu trong trường hợptrang 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).Nội dung các trang web có thể là văn bản tĩnh (static web page – trang web tĩnh) hoặc cũng cóthể được sinh ra bởi các web server ứng với mỗi lượt yêu cầu, các yêu cầu khác nhau đếncùng một trang web có thể nhận được các nội dung khác nhau (dynamic web page – trangweb động) Sự phân loại này sẽ được đề cập sâu hơn trong phần 2.1.4
2.1.2 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ình nê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ình duyệt web củacon người (web crawler phải sử dụng các phương thức dựa trên HTTP trực tiếp chứ khôngthông qua web browser như con người) Các web crawler thường bắt đầu với một danh sáchURL của các web page để ghé thăm đầu tiên Khi ghé thăm một URL, crawler sẽ đọc nộidung web page, tìm tất cả các hyperlink có trong web page đó và đưa các URL được trỏ tớibới các hyperlink đó vào danh sách URL Dựa vào danh sách URL này, Crawler lại tiếp tụcquá 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 webpage, các web 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 2-2 Sơ đồ hoạt động của một web crawler đơn giản
Trang 16Về bản chất, web crawling chính là quá trình duyệt đệ quy một đồ thị cây có các node làcác web page Tùy thuộc vào chiến lược của crawler, các node có thể được duyệt theo chiềusâu hoặc duyệt theo chiều rộng Trong thực tế, quá trình crawling web sẽ phải đối diện với rấtnhiều vấn đề khó khăn như: kích thước khổng lồ của world wide web, các trang web HTMLđược viết không chuẩn, hạn chế ghé thăm một URL đã được ghé thăm trước đó, các trangweb động, nội dung các trang web được cập nhật thường xuyên v.v… Tuy nhiên đề tài luậnvăn này sẽ chỉ cần một số khả năng của web crawler nên sẽ chỉ giải quyết một số vấn đề cụthể và sẽ được trình bày kỹ hơn trong các phần sau của báo cáo.
2.1.3 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ạichứ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ác web scraper được ra đời Web Scraper là một thuậ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, web harvesting hoặc web data extraction Các web scraper
khác với web crawler ở chỗ, trong khi web crawler tập trung vào việc duyệt các trang webthông qua các liên kết hyperlink, thì web scraper lại tập trung vào việc chuyển đổi nội dungkhông cấu trúc của các trang web (chủ yếu được viết bằng HTML) sang thành nội dung cócấu trúc, sau đó bóc tách, trích xuất phần thông tin mong muốn và lưu trữ lại vào các cơ sở dữliệu hoặc spreadsheet Các web scraper cũ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ủaweb scraping bao gồm: so sánh giá cả thị trường trực tuyến, nghiên cứu thị trường, thu thậpthô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ợptin 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ội dungchữ 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êu cầuHTTP đế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 17 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ựng mộtcây DOM (Document Object Model), giúp scraper 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
2.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ác trangweb độ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ộtchươ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áy chủ và luôn sẵn sàng được gửicho máy khách ngay sau khi một yêu cầu được nhận.”
Nhiều nghiên cứu trước đây [9, 10] đã cho thấy phần lớn nội dung trên Web đều là cácnội dung động Một trang web động cũng có thể có hai kiểu: động về nội dung (dynamiccontent) và động về hình thức thể hiện (dynamic appearance) Những trang web động về hìnhthức thể hiện có thể chỉ chứa nội dung tĩnh, nhưng có chứa những đoạn mã chạy ở máy khách,những đoạn mã này có thể làm thay đổi sự thể hiện của trang web (màu sắc, kích cỡ …) Tuynhiên những trang này không nằm trong phạm vi của định nghĩa trên, cũng như trong đề tàinày, do chúng ta chỉ tập trung vào việc làm sao để trích xuất ra nội dung dữ liệu trong cáctrang web
Các trang web động (trong phạm vi định nghĩa trên) cũng có thể được phân loại theo haitiêu chí sau: sự thể hiện và cách thức tạo ra [8]
2.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ác yêu cầu đếncù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 dungkhá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ức tổ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 đăngnhập Những trang kiểu này thường không thể trực tiếp truy xuất vào được mà phải vượt quamột bước xác thực danh tính (authentication)
Trang 18Theo 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ệucủa trang web Những trang kiểu này cũng không luôn luôn truy xuất trực tiếp được (tùythuộc vào phương thức truyền các tham số - GET hoặc POST – chi tiết về vấn đề này sẽ đượcphân tích ở phần 4), các trang kết quả nhận được cũng thườ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ũng thường là những trang web không thể crawlđược hoàn toàn bởi các crawler, và được gọi là Web ẩn (hidden Web, deep Web, invisibleWeb)
2.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 dung HTML củatrang web, sau đó được gửi đến máy khách yêu cầu Ví dụ tiêu biểu cho loại này là CGI hoặcJava 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 truyvấ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àocù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ênmá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ậttrên ở chỗ không phải toàn bộ mà chỉ một phần nội dung HTML đượ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úngkhông chạy trên server mà chúng được máy khách tải về và được thực thi trên máy khách.Nếu mã chỉ chạy trên máy khách thì đó có thể là JavaScript, Java Applet 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ông qua một đối tượng đặc biệt làXMLHttpRequest để có thể thay đổi nội dung trang web một cách động mà không cần loadtrang web mới
Trang 192.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ất nhỏ củaWorld Wide Web, đó là những trang web có thể đến được bằng cách đi theo các liên kếthyperlink Các crawler này thường phải bỏ qua các trang có tính động theo má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ục nghiên cứu và phát triển Hình 1 cho thấy cáinhìn tổng quan về sự phân loại các trang web tĩnh - động, cùng với khả năng của các webcrawler (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 2-3 Phân loại web cùng khả năng của các web crawler
2.2 Phân tích sơ bộ
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ương trì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
Trang 20scraper Nhìn chung ứng dụng sẽ cần 2 module chính: crawler module và data extractormodule 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ột trang danh mục), với mỗi trang web đượcduyệt qua crawler module sẽ tải nội dung trang web về và lưu trữ tạm Nội dung trang websau đó được chuyển cho data extractor module, data extractor module có nhiệm vụ phân tích,
xử lý nội dung trang web, chuyển đổi nó sang một cấu trúc trung gian nào đó để thuận tiệncho bước bóc tách, trích xuất dữ liệu
Các điểm khác biệt mấu chốt giữa ứng dụng đề tài cần xây dựng và các generic web
crawler hiện nay đó là:
Ứng dụng không cần phải cố gắng crawl càng nhiều web page trên WWW càng tốtnhư các web crawler khác
Ứng dụng không nhất thiết phải thường xuyên viếng thăm lại các trang web để cậpnhật nội dung
Ứ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ông như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
Trang 21Các đặc điểm trên dẫn đến hình vẽ sau, thể hiện những phần Web mà thành phầncrawler của ứng dụng có thể crawl được.
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
server-side
Không cầnxét vì nộidung đã làtĩnh
Hình 2-4 Phạm vi của thành phần crawler của ứng dụng trong đề tài
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, dongườ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ộthướ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ự
Trang 22học (machine learning) thông qua các dữ liệu mẫu [11], nhờ đó nó có thể ứng dụng được trênnhiề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ậnnày là tính tự động cao, có thể chạy được trên nhiều website khác nhau (cùng lĩnh vực) mộtcá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 cho mộ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 233 Các kiến thức nền tảng và các công nghệ liên quan
3.1 HTML
HTML (HyperText Markup Language – ngôn ngữ đánh dấu siêu văn bản) là một ngônngữ đánh dấu được thiết kế ra để tạo nên các trang web HTML được xem như là một ứngdụng của SGML (Standard Generalized Markup Language – một chuẩn ISO định nghĩa cácngôn ngữ đánh dấu văn bản tổng quát) HTML được tổ chức World Wide Web Consortium(W3C) 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,bởi nhiều nguyên nhân khác nhau (sử dụng các công cụ soạn thảo HTML cũ, người viết codengại thay đổi v.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)
Đá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ụ <ahref=”http://www.hcmut.edu.vn/”>ĐHBK</a> sẽ hiển thị từ ĐHBK như một liênkết ngoài đến website www.hcmut.edu.vn)
Trang 24 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
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 được chấp nhậnbở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ápchặ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 (HTML parsing), đặ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 ta cần phải chuyển đổi nội dungviế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
3.2 XML
XML (Extensible Markup Language – ngôn ngữ đánh dấu mở rộng) là một ngôn ngữđá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ư HTML, XMLcũ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ưutrữ thông tin, trong khi HTML tập trung vào việc thể hiện thông tin đó như thế nào Về tínhcấu trúc của nội dung, XML có thể dùng để định nghĩa các cấu trúc ngẫu nhiên tùy ý trongkhi HTML hoàn toàn bị giới hạn
Ví dụ của một tài liệu XML đầy đủ:
Trang 253.3 XHTML
XHTML (Extensible HyperText Markup Language) là một ngôn ngữ đánh dấu có cùngcác khả năng như HTML, nhưng có cú pháp chặt chẽ hơn XHTML được xây dựng dựa trênXML và được cho rằng sẽ là ngôn ngữ thay thế cho ngôn ngữ HTML trong tương lai
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ần phải thỏa điều kiệnnày Cụ thể, một số điểm khác biệt như sau [2]:
3.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 đượctrình bày cụ thể ở phần sau) và các phần tử phải lồng nhau một cách đúng thứ 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>
3.3.2 Tên các phần tử và tên các thuộc tính của phần tử 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
3.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ên XMLkhông cho phép điều này Tất cả các phần tử đều phải có thẻ đóng tương ứng ngoại trừ cácphầ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ụ:
Trang 26Đú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>
3.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ụ:
Trang 273.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ây của nhiều phần tử, mỗiphầ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âyhoặc lựa chọn chúng theo các tiêu chí nào đó, dựa trên các mối quan hệ như cha - con, tổ tiên
- con cháu Một biểu thức XPath (Xpath expression) có thể chọn một node hoặc một tập hợpcác node, hoặc nó có thể trả lại mộ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ên bản là XPath 1.0 và XPath 2.0
3.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ều bướ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
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 di chuyể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ác node này phải có một số đặc điểmnà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 đủ
Trang 28Một biểu thức XPath đơn giản:
/A/B/C
Biểu thức XPath này sử dụng giá trị mặc định của các axis specifier đó là giá trị child,
và các step của biểu thức đều không sử dụng predicate Biểu thức này chọn ra các phần tử Cnào mà là con của các phần tử B, và các phần tử B này cũng phải là con của các phần tử A
Cú pháp này của XPath có nét tương đồng với cú pháp của URI (Uniform ResourceIdentifier) cũng như cú pháp đường dẫn file của các hệ điều hành Unix
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ácphầ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ử Anào đó, phần tử A này lại là con của node ngữ cảnh (do biểu thức không bắt đầu bởi “/”) Nếuphần tử A có nhiều node con cháu cùng tên B thì biểu thứ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
3.4.2 Axis specifier
ancestor
ancestor-or-self
descendant
Trang 29descendant-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
preceding-sibling
3.4.3 Node test
Một số node test:
comment(): tìm một node chú thích, ví dụ <! comment >
text(): tìm một node có kiểu là text, ví dụ hello trong <a>hello<b> world</b></a>
instruction(): tìm các chỉ dẫn xử lý của XML, ví dụ
processing-instruction(‘php’) sẽ trả về node <?php echo $a; ?>
node(): tìm bất kỳ node nào
3.4.4 Predicate
Một step của biểu thức XPath có thể có nhiều predicate Mỗi predicate cũng được viếtdưới dạng biểu thức và nằm trong cặp ngoặc vuông [ ], các node nhận được của biể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ột thuộ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ếugiá 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ợptrả về một tập node thì khi tậ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ính id
Trang 303.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ểu thứcboolean)
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:
position(): trả về giá trị kiểu số thể hiện vị trí của node trong một chuỗi các node
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
node-set thì hàm này trả về giá trị chuỗi của node đầu tiên trong node-set (theo thứ tựxuất hiện trong tài liệu)
contains(s1, s2): trả về true nếu s1 chứa s2.
true(), false(): trả về các giá trị true, false tương ứng
trả về các node product có node con comment chứa từ ‘bad’
3.5 Các công nghệ và thư viện hỗ trợ khác
3.5.1 HTML Tidy
HTML Tidy là một ứng dụng phần mềm nguồn mở, giúp “sửa chữa” các tài liệu HTML
bị lỗi cú pháp (bad HTML) hoặc chuyển hẳn chúng sang các tài liệu XHTML HTML Tidy
Trang 31ban đầu được phát triển đầu tiên bởi Dave Raggett thuộc tổ chức W3C, sau này thì HTMLTidy trở thành một dự án của Sourceforge HTML Tidy bao gồm một công cụ chạy trong môitrường command line và một gói thư viện TidyLib có chức năng tương tự để tích hợp vào cácngôn ngữ khác Hiện nay TidyLib đã được tích hợp vào PHP như một gói mở rộng từ phiênbản 5.0b3 trở đi (Tidy extension), điều này giúp lập trình viên có thể sử dụng ngay các khảnăng của HTML Tidy như phân tích (parse), kiểm tra (validate) và sửa chữa (repair) các tàiliệu HTML, XHTML và XML ngay từ trong mã PHP Sau đây là một số ví dụ về các khảnăng của HTML Tidy:
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 32<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 33cURL cũng hỗ trợ các phương thức như HTTP POST, HTTP PUT, FPT uploading, proxy, xácthực username / password v.v…
Trang 344 Phân tích
4.1 Một ví dụ tổng quát của bài toán thu thập dữ liệu
Xem xét mô hình tổng quát của một website cung cấp danh bạ về các doanh nghiệptrong 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ĩnhvự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ĩnhvực nhỏ, trong mỗi sub category lại phân ra làm nhiều phân mục nhỏ hơn nữa, cứ thế cho đếnphân mục nhỏ nhất, phân mục nhỏ nhất sẽ chứa danh sá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ân mục này Các trang chi tiết này chính là cáctrang cấp thấp nhất, nội dung của trang này sẽ chứa các thông tin mà người sử dụng websitequan 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ấpN+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ỗi cấ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 trang hiển thịdanh sách các category lớn nhất là những trang cấp 1, từ một trong những trang cấp 1 nếu tachọ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 35Hình 4-5 Một trang web danh bạ
Giả sử một tình huống như sau: một người sử dụng tên là John muốn thu thập các thôngtin 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ư John 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ôngviệc John phải làm có thể sẽ như sau:
1 Từ trang chủ website, John lần lượt click vào các liên kết phân mục để vào đượcphâ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 John mong muốn, John sẽ thấy danhsách các doanh nghiệp thuộc lĩnh vực này được liệt kê ra Anh ta phải click 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), John chọn nhữngthông tin mà anh ta mong muốn (ở dạng chữ) và copy các thông tin đó, lưu vào đâu
đó mà John muốn, có thể là một tài liệu Microsoft Excel
Trang 364 Sau khi lấy được thông tin của doanh nghiệp này, John phải trở lại trang danh sáchdoanh nghiệp trước đó (trang cấp N-1) và click vào đường dẫn dẫn đến trang chi tiếtcủa doanh nghiệp thứ hai John lại lặp lại công việc của bướ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 doanh nghiệp
có thể sẽ bị phân thành nhiều trang, và nếu John đã duyệt hết thông tin của cácdoanh nghiệp nằm trong trang đầu tiên, anh ta sẽ phải chuyển sang trang thứ hai củadanh sách (cũng bằng một đường dẫn hoặc một nút do website cung cấp) để tiếp tụccô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 ramột số nhận xét như sau:
Khi John click chuột để vào các trang phân mục con, hoặc để vào trang thông tin chitiết, công việc này chính là để chuyển từ trang này sang trang khác Tuy nhiên đốitượng trên trang web mà John có thể click chuột vào được, không phả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 đối tượ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ủa website mà không phải bao giờchuyển trang, URL của trang mới cũng khác URL 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 webchỉ load lại phần nội dung cần thiết mà không khiến web browser phải load một trangmới (công nghệ Ajax [1]) Tuy nhiên mọi công nghệ vẫn phải dựa vào mộ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 “clickchuột” của người duyệt Web là hoàn toàn khả thi, với điều kiện chúng ta phải cungcấ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ầnGET hoặc POST các tham số gì, hoặc cần thực thi 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, John chọn các thôngtin mà anh ta mong muốn, copy-paste để lưu lại Có thể thấy rằng cô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à cả một vấn đề không nhỏ.Các trang web được viết ra để phục vụ cho đối tượng chính là con người, các nội dungthể hiện trên trang web luôn có ngữ nghĩa riê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 web nằm trong cùng một website lại thường được thiết kế
Trang 37vớ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 trangthông tin chi tiết về doanh nghiệp nêu trên, các trang này sẽ thường có chung mộttemplate, 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 cho thôngtin của các doanh nghiệp riêng biệt Chính vì lý do này, khi đã có được nội dung củatoàn bộ trang web, chúng ta hoàn toàn có thể trích xuất được phần nội dung mongmuốn, giả lập cho công việc copy-paste của John, với điều kiện được cung cấp vị tríchính xác của phần dữ liệu mong muốn trong template củ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 Trong thự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ốn trích xuất cácthông tin ở trang detail cấp thấp nhất mà anh ta còn muốn một số thông tin ở các trang cấpcao hơn, chẳng hạn thu thập thông tin các doanh nghiệp của nhiều lĩ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ải cung cấp khả năng trích xuất đượcthông tin nằm trong một hoặc nhiều trang có cấp bất kỳ, các dữ liệu trích xuất được sẽ đượclưu vào cơ sở dữ liệu để tiện cho việc tra cứu, sử dụng về sau
4.2 Phân loại các trang Web dựa vào cách thức 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ìn tổngquan 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ần xâ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ện thự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 vào cách thức chuyển trang từ trang đósang các trang Web khác, hoặc thay đổi từ nội dung này sang nội dung khác trong cùng mộttrang web Đây là vấn đề cốt lõi quyết định hoạt động của thành phần Crawler của ứng dụng
vì thành phần này quan tâm đến việc làm thế nào để lấy được nội dung của các trang Web mộtcách tự động
Cách thức chuyển trang này phụ thuộc vào kỹ thuật sử dụng của người lập trình web.Nhìn chung có thể phân ra làm 2 loại sau:
A Loại I: Kỹ thuật chuyển trang sử dụng các phương thức HTTP GET, HTTP POST thông thường Các trang web loại này không sử dụng JavaScript, hoặc có
Trang 38sử dụng JavaScript nhưng không làm ảnh hưởng đến cách thức chuyển trang hoặc nội dung của trang web.
Giả sử một trang web X có thể dẫn đến một trang web Y khác và Y là một trang cầnthiết cho quá trình thu thập dữ liệu mong muốn Trang web X sẽ được xếp vào loại I nếu như
ta có thể đến được trang Y (hoặc chính xác hơn là lấy được nội dung HTML của Y) chỉ nhờvào duy nhất một yêu cầu HTTP GET hoặc HTTP POST đơn giản Ví dụ:
- Y được dẫn đến từ X bởi các liên kết hyperlink đơn thuần (GET)
- Y được dẫn đến từ X bởi một form submit (GET hoặc POST)
- Y được dẫn đến từ X bởi một yêu cầu GET hoặc POST, chương trình thực thi trên
máy chủ có sử dụng đến cookie hoặc các biến session để tạo ra nội dung của Y
- Với nhiều ứng dụng web xây dựng bằng ASP.NET, khi người duyệt web tác độngmột điều khiển (control) trên X, một đoạn mã JavaScript được thực thi để postbackmột hoặc nhiều tham số chứa trong các hidden input, máy chủ nhận các tham số,
xử lý và chuyển người dùng đến trang Y Kỹ thuật này về bản chất cũng là mộtHTTP POST đơn thuần với các tham số nằm ẩn trong nội dung HTML
B Loại II: kỹ thuật chuyển trang hoặc sử dụng đến các đoạn mã nhúng client-side như JavaScript, làm thay đổi cấu trúc DOM hoặc nội dung bên trong của trang web, hoặc không thể xếp vào loại I.
Giả sử một trang web X có thể dẫn đến một trang web Y khác và Y là một trang cầnthiết cho quá trình thu thập dữ liệu mong muốn Trang web X sẽ được xếp vào loại II nếu như
ta không thể đến được Y (hoặc chính xác hơn là lấy được nội dung HTML của Y) chỉ bằngmột yêu cầu HTTP GET hoặc HTTP POST Ví dụ:
- Công nghệ Ajax: sử dụng JavaScript để thực hiện các yêu cầu GET hoặc POST,tuy nhiên chỉ để lấy và nhận dữ liệu, dữ liệu nhận được từ máy chủ lại đượcJavaScript xử lý (chẳng hạn thay đổi cấu trúc DOM của trang web) để hiển thị kếtquả lên cho người duyệt web Web browser cũng không phải load trang web mới
4.3 Phân tích và các giải pháp
Từ những phân tích trên, nhóm nhận thấy ứng dụng cần xây dựng đòi hỏi phải có cáckhả năng chính sau đây: (tên của ứng dụng được tạm đặt là WDE – Web Data Extractor)
Trang 39- Người sử dụng có thể cho WDE biết anh ta muốn bắt đầu quá trình thu thập dữliệu từ trang web nào, dựa theo cách anh ta thực hiện thủ công.
- Người sử dụng có thể cho WDE biết anh ta muốn trình tự chuyển trang (chuyểnphân trang, chuyển đến trang chi tiết cấp thấp hơn, hoặc thay đổi nội dung trêncùng trang web) như thế nào, dựa theo kỹ thuật chuyển trang được hiện thực bởitrang web
- Người sử dụng có thể cho WDE biết ở mỗi trang được duyệt qua, phần dữ liệu nàotrong nội dung của trang cần được trích xuất
- Người sử dụng có thể cho WDE biết mỗi dữ liệu trích xuất được sẽ được lưu vàođâu và như thế nào
Bốn khả năng trên cùng thể hiện chung cho một khả năng lớn duy nhất: ứng dụng cókhả năng giúp người sử dụng mã hóa các tri thức, cung cấp các chỉ dẫn quan trọng cho ứngdụng Khi thực hiện theo cách thủ công, người thu thập cần phải thực hiện lặp đi lặp lại cácchuỗi thao tác một cách phí công sức do các trang web trong cùng một website thường dùngchung một web template Do đó, nếu như WDE có thể giúp người sử dụng đặc tả được cácchuỗi thao tác (lặp lại) này, WDE sẽ có thể trích xuất dữ liệu một cách tự động và hiệu quả.Nhóm đã sử dụng ngôn ngữ XML làm ngôn ngữ thể hiện các đặc tả này vì tính cấu trúc rõràng của XML Tuy nhiên, một khó khăn không nhỏ đó là: người sử dụng cũng cần phải cóhiểu biết về cấu trúc của các trang web cần trích xuất thông tin cũng như cách thức các trangnày liên kết với nhau Lợi điểm của cách tiếp cận này đó là người sử dụng chỉ cần đặc tả mộtlần duy nhất trước khi thực thi ứng dụng
Ngoài ra theo như các phân tích ở phần trước, thực tế không chỉ có các thao tác làchuyển trang bằng hyperlink và trích xuất dữ liệu bằng copy – paste, mà còn có các tìnhhuống khác như: các trang cần xác thực danh tính (authentication), các trang cần nhập liệuvào form và submit, các trang sử dụng Ajax, dữ liệu sau khi trích xuất cần được xử lý thêmv.v… WDE cũng cần phải hỗ trợ người dùng đặc tả cách xử lý đối với các trường hợp này (ví
dụ login bằng username và password gì, nhập liệu các giá trị gì vào form, dữ liệu sau khi tríchxuất được thì cần xử lý như thế nào …)
Trang 40Như vậy, dựa trên những phân tích trên đây, nhóm thực hiện đề tài đưa ra các giải phápsau:
Ứng dụng cần tập trung vào hai module chính, quan trọng nhất đó là Crawler vàExtractor Cả hai module phải có khả năng hoạt động đan xen với nhau, input củamodule này là output của module kia và ngược lại
Đối với module Extractor:
- Việc bóc tách, trích xuất dữ liệu hiệu quả hoàn toàn phụ thuộc vào sự chính xáccủa việc chỉ ra vị trí tương đối của phân vùng dữ liệu cần trích xuất trong nội dungHTML Tuy nhiên HTML không phải là một ngôn ngữ có cấu trúc tốt, cần phảichuyển nội dung này sang dạng khác có cấu trúc hơn, đó chính là XHTML, với sựtrợ giúp của thư viện Tidylib
- XHTML tận dụng được những điểm mạnh của XML, nên cũng đem lại các khảnăng truy vấn tìm kiếm node mạnh mẽ bằng XPath
- Nội dung XHTML “sạch” sẽ giúp hạn chế được các lỗi xảy ra ngay cả khi sử dụngphương pháp tìm kiếm so trùng, điều này đem lại một lựa chọn khác đó là PerlExpression
- Ngôn ngữ XPath tuy mạnh mẽ nhưng đôi khi hơi dài dòng Nhóm quyết định hỗtrợ thêm một lựa chọn nữa đó là jQuery Selector, có cú pháp đơn giản hơn, nhưngvẫn giữ lại khả năng tìm kiếm bằng XPath
Đối với module Crawler:
- Nhiệm vụ quan trọng nhất của Crawler chính là tải về nội dung tất cả các trangweb cần thiết cho bài toán thu thập dữ liệu Tuy nhiên, sự đa dạng của các côngnghệ Web đã tạo ra nhiều khó khăn cho mục tiêu này Vì thế, nhóm đã đưa ra sựphân loại các trang web dựa vào cách thức chuyển trang và module Crawler sẽ giảiquyết vấn đề theo phân loại này
- Đối với các trang thuộc loại I, sử dụng thư viện CURL để thực hiện các yêu cầuHTTP GET, HTTP POST, kèm theo gửi tham số, hỗ trợ cookie, authentication vàproxy
- Đối với các trang thuộc loại II, mấu chốt là phải thực thi được các đoạn mãJavaScript Vì thư viện CURL không làm được điều này nên giải pháp của nhóm
đó là phải xây dựng một Crawler engine riêng dưới dạng web browser giả lập, mục