BÁO CÁO TỐT NGHIỆP
XÂY DỰNG ỨNG DỤNG THU
THẬP DỮ LIỆU WEB ĐỘNG
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
2
MỤC LỤC
4 Phân tích 4
4.1 Quá trình thu thập dữ liệu tổng quát 4
4.2 Phân loại các trang Web dựa vào cách thức chuyển trang 7
4.3 Các khả năng ứng dụng cần cung cấp 9
5 Thiết kế 11
5.1 Sơ đồ Use Case 11
5.2 Kiến trúc tổng quan 12
5.3 Thành phần FRONT 14
5.3.1 Mô hình MVC 14
5.3.2 Bot Manager 15
5.3.2.1 Các trạng thái của Bot 15
5.3.2.2 Các lệnh tạo mới, xóa, sửa thông tin Robot 17
5.3.3 Statistics 20
5.4 Thành phần CORE 20
5.4.1 Crawler 21
4 Phân tích
4.1 Quá trình thu thập dữ liệu tổng quát
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ệ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ân mụ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 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ác
trang 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 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ỗ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 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.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
5 Hình 4-1. 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ô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ư 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ông
việc John phải làm có thể sẽ như sau:
mớ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 “click
chuộ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 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ự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ông
tin 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 dung
thể 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
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
7
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ế 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 chi tiế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 cho thông
tin 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ủa
toàn bộ trang web, chúng ta hoàn toàn có thể trích xuất được phần nội dung mong
muố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. XPath và Perl
Expression có thể giúp chúng ta đạt được mục đích này. Một lưu ý nhỏ rằng: nội dung
của trang web phải ở một dạng chuẩn tựa XML để XPath có thể chỉ ra được đúng vị trí
dữ liệu ta mong muốn, cũng như để tránh các lỗi có thể xảy ra (chẳng hạn do người
thiết kế web viết cẩu thả - bad HTML), và dạng chuẩn đó tựa XML đó chính là
XHTML. Thư viện Tidy sẽ giúp ứng dụng chuyển đổi nội dung HTML thành
- 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 động
một điều khiển (control) trên X, một đoạn mã JavaScript được thực thi để postback
mộ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ột
HTTP 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ần
thiế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ằng
mộ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 được
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
9
JavaScript xử lý (chẳng hạn thay đổi cấu trúc DOM của trang web) để hiển thị kết
quả lên cho người duyệt web. Web browser cũng không phải load trang web mới.
4.3 Các khả năng ứng dụng cần cung cấ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ác
khả năng chính sau đây: (tên của ứng dụng được tạm gọi là WDE – Web Data Extractor)
- 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ển
phân trang, chuyển đến trang chi tiết cấp thấp hơn, hoặc thay đổi nội dung trên
cùng trang web) như thế nào, dựa theo kỹ thuật chuyển trang được hiện thực bởi
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
11
5 Thiết kế
5.1 Sơ đồ Use Case
Hình 5-1. Sơ đồ Use Case của ứng dụng WDE
Sơ đồ trên là các tác vụ mà người sử dụng có thể thực hiên trong chương trình, chi tiết ý
nghĩa các tác vụ được liệt kê ở bảng dưới đây:
STT
Tên Ý nghĩa Ghi chú
1 Add Robot Khởi tạo một Robot mới Dữ liệu đầu vào của Robot
không được vi phạm với
cấu trúc XML của chương
trình
2 Edit Robot Thay đổi cấu hình của Robot
Dữ liệu đầu vào của Robot
không được vi phạm với
cấu trúc XML của chương
trình
3 Delete Robot Xóa Robot
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
12
4 Start Robot Kích họat Robot chạy Toàn bộ thông tin, dữ liệu
thu thập được đều bị xóa
trước khi Robot được chạy.
5 Pause Robot Tạm dừng Robot Có thể resume để Robot
tiếp tục quá trình thực thi.
6 Resume Robot Tiếp tục chạy Robot đang
Bản thân thành phần FRONT sử dụng kiến trúc Model-View-Controller (MVC) [1] cho
các module con. Các module trong FRONT như Bot Manager, Bot Statistics sẽ đảm nhiệm
vai trò quản lý, thực thi hoặc dừng các Bot, lưu lại các thông số trong quá trình thực thi ứng
dụng, thể hiện lên cho người sử dụng. Phần giao diện của ứng dụng cũng nằm trong thành
phần FRONT này.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
14
Thành phần CORE bao gồm hai module quan trọng đó là Crawler và Extractor, đảm
nhiệm vai trò chức năng chính của ứng dụng. Tuy nhiên để nâng cao khả năng mở rộng cho
ứng dụng, hai module con này được gộp chung lại vào một module lớn hơn, đó là module
Robot – đại diện cho một Bot.
5.3 Thành phần FRONT
Trong FRONT có hai thành phần chính là Bot Manager và Bot Statistics. Kiến trúc
chung của FRONT là mô hình MVC.
Hình 5-3. Kiến trúc của thành phần FRONT
5.3.1 Mô hình MVC
MVC (Model-View-Controller) là một mẫu kiến trúc phần mềm được sử dụng rất rộng
rãi trong công nghệ phần mềm. MVC đem lại sự tách bạch giữa logic ứng dụng (domain
logic) với dữ liệu bên dưới và giao diện thể hiện, tạo nhiều thuận lợi cho việc phát triển, kiểm
thử và bảo trì do giao diện thể hiện và dữ liệu bên dưới thường ít liên quan đến nhau.
Model đại diện cho các dữ liệu bên dưới của ứng dụng, bao đóng các trạng thái của ứng
dụng (application state). Các dữ liệu này thường được thể hiện như các cấu trúc dữ liệu.
Trong các ứng dụng lớn sử dụng mô hình MVC, các dữ liệu trong model được quản lý, truy
xuất, thay đổi bởi Data Access Layer [1], tuy nhiên MVC không ràng buộc điều này và việc
có hiện thực các data access object trong model hay không là do quyết định của người lập
trình. Trong thành phần FRONT các lớp model không sử dụng các data access object. Ví dụ
trong module Bot Manager của FRONT, model là một class duy nhất có các function giúp
xóa, sửa, tạo mới các bot, hoặc thực hiện các công việc liên quan đến database.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
của bot (Cancel).
- Quá trình chạy của Bot gặp lỗi và người sử dụng quyết định ngừng không chạy
tiếp bằng lệnh Cancel.
Started: đây là trạng thái đang thực thi của Bot. Từ trạng thái này, người sử dụng có
thể quay trở lại trạng thái Ready nếu sử dụng lệnh Stop, hoặc chuyển đến trạng thái
Paused nếu sử dụng lệnh tạm dừng Pause. Nếu có lỗi xảy ra trong quá trình thực thi,
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
17
Bot sẽ tự động chuyển đến trạng thái Error. Trạng thái Started có thể đạt được thông
qua các cách sau:
- Người sử dụng ra lệnh start khi Bot đang ở Ready
- Bot đang bị tạm dừng (Paused) và người sử dụng quyết định chọn Resume để Bot
tiếp tục quá trình thực thi.
- Bot đang ở trạng thái bị lỗi (Error) và người sử dụng quyết định chon Resume để
Bot tiếp tục quá trình thực thi.
Paused: đây là trạng thái tạm dừng của Bot. Từ trạng thái này nếu người sử dụng hủy
quá trình thực thi bằng Cancel thì Bot trở về trạng thái Ready, sẵn sàng cho một lần
chạy lại khác; nếu người sử dụng cho Bot quay lại thực thi tiếp bằng Resume thì trạng
thái của Bot sẽ trở lại Started. Để đến được trạng thái Paused này chỉ có một trường
hợp đó là người sử dụng ra lệnh tạm dừng Bot bằng lệnh Pause.
Error: trạng thái lỗi của Bot. Trong quá trình chạy nếu Bot gặp một lỗi (nặng) thì Bot
sẽ tự động chuyển đến trạng thái Error. Trạng thái này cho người sử dụng hai lựa chọn
đó là Resume – quay trở lại và tiếp tục quá trình thực thi và Cancel – ngừng luôn quá
trình thực thi, trở về trạng thái Ready.
5.3.2.2 Các lệnh tạo mới, xóa, sửa thông tin Robot
Tạo mới Robot: Khi tạo mới một Robot (Bot), WDE sẽ yêu cầu người sử dụng nhập
dữ liệu đặc tả đầu vào dưới dạng XML. Sau khi người sử dụng submit, đặc tả đầu vào
được lưu vào cơ sở dữ liệu và trạng thái của Bot vừa tạo sẽ ở trạng thái Ready.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
18
21
xuất dữ liệu tự động. Để có thể vận hành được, Robot cũng cần đến các đối tượng trợ giúp,
được gọi là các Helper. Các helper có thể hiểu là những đối tượng Wrapper của các thư viện
quan trọng, hoặc là những đối tượng có các hàm trợ giúp như giúp đọc dữ liệu đầu vào XML.
Ngoài ra Crawler và Extractor cũng cần đến một số thư viện ngoài để đem lại một số khả
năng hữu ích cho ứng dụng. Chi tiết về các thành phần này sẽ được đề cập sâu hơn ở các phần
sau.
Hình 5-10. Kiến trúc thành phần CORE
5.4.1 Crawler
Crawler đảm nhận trách nhiệm quản lý các URL đã ghé thăm cũng như cần được ghé
thăm tiếp theo, gửi yêu cầu đến máy chủ, tải nội dung trang web về dưới dạng HTML text.
Các URL cần được ghé thăm được lưu trong cơ sở dữ liệu của Bot, sẽ được Crawler đọc lên,
cùng với các thông tin hỗ trợ khác thể hiện cách thức chuyển trang (get, post, parameters,
javascript …) để Crawler có thể lấy được đúng nội dung của các trang web tiếp theo.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
22
Hình 5-11. Quá trình hoạt động tổng quát của ROBOT
Crawler thật sự là một wrapper của hai crawler engine:
Simple Crawler Engine: crawler đơn giản, giúp lấy nội dung các trang web có thể đến
được bằng các phương thức GET và POST thông thường, bao gồm cả sự chuyển trang
cần đến form submission, authentication, nhưng không có sự phụ thuộc vào mã client-
side như JavaScript.
Advanced Crawler Engine: crawler nâng cao, giúp lấy nội dung các trang web cần có
xử lý JavaScript như Ajax hoặc các trang có sự thay đổi cấu trúc DOM nhờ các đoạn
mã JavaScript.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
và Extractor. Một số các helper quan trọng như:
CURL: hiện thực bởi class pHTML. Đây là một wrapper của thư viện php curl và
được Crawler sử dụng cho quá trình gửi yêu cầu tải nội dung các trang web. CURL
helper này đem lại các hàm hỗ trợ bao bọc các hàm của curl, như:
- thực hiện một yêu cầu HTTP GET, kèm theo các tham số nếu có
- thực hiện một yêu cầu HTTP POST, kèm theo các tham số nếu có
- chuyển các mảng data trong php thành chuỗi query để đính kèm vào URL khi gửi
yêu cầu (là các tham số)
- sử dụng proxy cho các yêu cầu HTTP
TIDY: hiện thực bởi class pTIDY, đây là wrapper của thư viện php tidy, đem lại khả
năng chuyển đổi một nội dung HTML thành XHTML (repair). TIDY helper được
Extractor sử dụng mỗi khi Extractor nhận được nội dung HTML từ Crawler.
DOM: hiện thực bởi class pDOM, giúp chuyển đổi nội dung XHTML thành một cấu
trúc cây DOM trong bộ nhớ chương trình, được sử dụng bởi XPath Extractor
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
25
XPATH: hiện thực bởi class pXPATH, giúp thực hiện các truy vấn XPath trên nội dung
XHTML, được sử dụng bởi XPath Extractor