Sử dụng cú pháp jquery selector để lấy dữ liệu dưới sự hỗ trợ của thư viện phpQuery.
jQuery là một javascript framework đang được sử dụng khá rộng rãi trong các ứng dụng
Web trong thời gian gần đây . jQuery cung cấp chức năng jQuery Selector - một cách thức tìm
kiếm các phần tử trên trang web d ựa vào cú pháp CSS. Cộng đồng người sử dụng PHP cũng
đã xây dựng nên phpQuery - một thư viện dành cho PHP, đem lại các tính năng của jQuery
vào ngay trong code PHP.
Mỗi template của selector có dạng: expression | function:argument. Trong đó expression
là mẫu tìm kiếm, function là hàm thực hiện với tham số argument sau khi tìm kiếm.
46 trang |
Chia sẻ: lylyngoc | Lượt xem: 3905 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Báo cáo Tốt nghiệp xây dựng ứng dụng thu thập dữ liệu web động, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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
5.4.2 Extractor ....................................................................................................... 23
5.4.3 Các Helper .................................................................................................... 24
6 Hiện thực ..................................................................................................................... 26
6.1 Môi trường phát triển ứng dụng ............................................................................ 26
6.2 Giao diện sử dụng của WDE ................................................................................. 26
6.3 Đặc tả dữ liệu đầu vào bằng XML (FOXROCK) .................................................. 30
6.3.1 Cấu trúc tổng quát của file cấu hình XML ..................................................... 30
6.3.2 Chi tiết các thành phần (element) .................................................................. 30
6.4 Các action ............................................................................................................. 30
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
3
6.5 Cấu trúc Database ................................................................................................. 30
6.6 Front ..................................................................................................................... 33
6.6.1 Bot Manager ................................................................................................. 33
6.7 Core ..................................................................................................................... 35
6.7.1 Robot ............................................................................................................ 35
6.7.1.1 Quản lý tiến trình của Robot (Robot process) ............................................ 36
6.7.1.2 Thực hiện quy trình thu thập dữ liệu .......................................................... 38
6.7.2 Crawler ......................................................................................................... 39
6.7.2.1 Simple Crawler: ........................................................................................ 40
6.7.2.2 Advanced Crawler: ................................................................................... 42
6.7.2.2.1 wdeBrowser ........................................................................................ 42
6.7.2.2.2 Ví dụ ................................................................................................... 43
6.7.3 Extractor ....................................................................................................... 44
6.7.3.1 Expression Extractor ................................................................................. 45
6.7.3.2 XPath Extractor......................................................................................... 45
6.7.3.3 Selector Extractor...................................................................................... 46
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
4
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:
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 đượ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 John mong muốn, John sẽ thấy danh
sá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ữ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à John muốn, có thể là một tài liệu Microsoft Excel.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
6
4. Sau khi lấy được thông tin của doanh nghiệp này, John phải trở lại trang danh sách
doanh nghiệp trước đó (trang cấp N-1) và click vào đường dẫn dẫn đến trang chi tiết
củ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ác
doanh nghiệp nằm trong trang đầu tiên, anh ta sẽ phải chuyển sang trang thứ hai của
danh 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ụ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 John click chuột để vào các trang phân mục con, hoặc để vào trang thông tin chi
tiết, công việc này chính là để chuyển từ trang này sang trang khác. Tuy nhiên đối
tượ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 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ột trang
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
XHTML.
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ác
thô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ấp cao
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 được
thô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ẽ được
lư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ổ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ầ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ột
trang 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
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
8
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ột
cá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ó
sử 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ầ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 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 độ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
trang 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ào
trong 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 ứng
dụ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ác
chuỗ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ùng
chung một web template. Do đó, nếu như WDE có thể giúp người sử dụng đặc tả được các
chuỗ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 trang
nà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ột
lầ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ình
huố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ệu
và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êm
v.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í
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
10
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ích
xuất được thì cần xử lý như thế nào …).
Bên cạnh đó, WDE cũng cần cho phép người sử dụng quản lý các quá trình thu thập dữ
liệu của mình, hay nói cách khác là quản lý các Robot, mỗi Robot được sử dụng cho một bài
toán thu thập dữ liệu. Các Robot cũng có thể chạy song song (đa tiến trình) để có thể đem lại
hiệu quả công việc cao hơn. Một số các khả năng mở khác sẽ được đề cập chi tiết hơn ở các
phần sau của báo cáo 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
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
tạm dừng
7 Cancel Robot Hủy bỏ quá trình thực thi
của một Robot
Nếu người dùng Start
Robot trở lại thì toàn bộ
thông tin, dữ liệu thu thập
được trong lần chạy trước
sẽ bị xóa.
8 Export Data Xuất dữ liệu thu thập được
ra tập tin để người dùng có
thể sử dụng về sau
Các định dạng tập tin hỗ
trợ: SQL, CSV, XLS,
XLSX
9 Thay đổi
connection
Thay đổi đường đi có sẵn
10 Statistic Thống kê Robot
5.2 Kiến trúc tổng quan
Kiến trúc của ứng dụng ở mức cao nhất được chia làm hai thành phần chính: FRONT và
CORE.
FRONT là thành phần front-end của ứng dụng, còn CORE là thành phần cốt lõi của ứng
dụng (back-end), thực hiện các công việc crawl và trích xuất dữ liệu. Hai thành phần này
tương tác với nhau để cùng vận hành.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
13
Hình 5-2. Kiến trúc tổng quan của WDE
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
15
View: khi model có sự thay đổi, nó sẽ thông báo đến các view liên quan để các view này
có thể cập nhật. Một model có thể có nhiều view tương ứng với nó, các View này giúp thể
hiện model dưới dạng phù hợp để có thể tương tác với người sử dụng. Ví dụ trang giao diện
giúp quản lý các Bot chính là view của Bot Manager module.
Controller tạm gọi là phần “điều khiển”, đảm nhiệm việc nhận yêu cầu từ các view và
chuyển thành các lời gọi hàm gọi xuống model object, sau đó controller cũng giúp chọn view
đích để hoàn tất việc phản hồi của yêu cầu (response). Controller thể hiện cho cách ứng xử
của ứng dụng (application behavior). Trong Bot Manager, controller là cầu nối giữa giao diện
quản lý Bot và model object, ngoài ra cũng là cầu nối giữa người sử dụng với thành phần
CORE của ứng dụng.
Hình 5-4. Mô hình MVC
5.3.2 Bot Manager
5.3.2.1 Các trạng thái của Bot
Một trong những trách nhiệm của việc quản lý Bot đó là quản lý trạng thái của một Bot.
Sơ đồ sau đây thể hiện các trạng thái của Bot và sự dịch chuyển giữa các trạng thá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
16
Hình 5-5. Sơ đồ các trạng thái của Bot
Có 4 trạng thái như sau:
Ready: đây là trạng thái sẵn sàng của Bot. Từ trạng thái này người sử dụng chỉ có thể
có một lựa chọn ra lệnh đó là Start (khởi động chạy). Trạng thái Ready có thể đạt
được bằng một trong những cách sau:
- Sau khi người sử dụng submit input XML, bot manager parse, xử lý input này
thành các setting và lưu vào database, lúc này bot sẵn sàng cho lần chạy đầu tiên.
- Bot đang chạy và người sử dụng ra lệnh dừng (Stop), lúc này bot trở về trạng thái
sẵn sàng cho lần chạy lại tiếp theo.
- Bot đang được tạm dừng (Paused) và người sử dụng quyết định hủy sự thực thi
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
Hình 5-6. Quá trình tạo mới một Bot
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
19
Chỉnh sửa thông tin Robot: Người sử dụng có thể thay đổi đặc tả đầu vào sau khi đã
tạo Bot. Nếu Bot đang chạy thì ứng dụng sẽ tự ngừng Bot để Bot trở về trạng thái
Ready. Sau khi chỉnh sửa, ứng dụng sẽ đọc lại đặc tả XML và cập nhật lại vào cơ sở
dữ liệu.
Hình 5-7. Quá trình chỉnh sửa một Bot
Xóa Bot: khi xóa một Bot, toàn bộ thông tin cũng như dữ liệu trích xuất được trong
các lần chạy trước của Bot trong cơ sở dữ liệu sẽ bị xóa.
Hình 5-8. Quá trình xóa một Bot
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
20
Hình 5-9. Quá trình nhận dữ liệu đặc tả đầu vào XML
5.3.3 Statistics
TODO
5.4 Thành phần CORE
CORE là thành phần cốt lõi của WDE, thực hiện các chức năng chính của ứng dụng đó
là crawl các trang web và trích xuất dữ liệu từ chúng. Đối tượng giúp CORE thực hiện các tác
vụ này và cũng là đối tượng quan trọng nhất trong CORE, đó là Robot. Có thể hiểu Robot như
một đối tượng điều khiển, phối hợp hai đối tượng khác là Crawler và Extractor, đây là hai
thực thể có chức năng tách bạch và cùng được Robot sử dụng để hoàn thành công việc trích
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
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
23
Hình 5-12. Crawler gồm có 2 crawler engine là Simple và Advanced
5.4.2 Extractor
Extractor đảm nhận trách nhiệm đọc nội dung HTML do Crawler tải về, phân tích,
chuyển đổi HTML thành XHTML nhờ helper Tidy. Sau đó Extractor parse nội dung này để
bóc tách, trích xuất ra các dữ liệu cần thiết, bao gồm các thông tin có ích cho người dùng,
hoặc các dữ liệu khác cần thiết cho quá trình thực thi tiếp theo của ứng dụng như URL của
các phân trang, URL của các trang con. Để Extractor có thể lấy ra được đúng các dữ liệu này,
người sử dụng cần phải đặc tả các thông tin “dẫn đường” cho Extractor. Nhóm đã quyết định
sử dụng 3 cách thức để giúp việc đặc tả này, đó là Perl Expression, XPath và jQuery Selector.
Điều này đem lại sự mềm dẻo cho WDE vì người sử dụng có thể lựa chọn cách thức nào cảm
thấy thuận lợi nhất.
Từ 3 cách thức trên, nhóm đã thiết kế Extractor như một Wrapper của 3 extractor con,
mỗi extractor sử dụng một cách thức khác nhau để bóc tách, trích xuất dữ liệu:
Expression Extractor: dùng Perl Expression để lấy dữ liệu
XPath Extractor: dùng XPath để lấy dữ liệu
Selector Extractor: dùng jQuery Selector để lấy dữ liệu
Các extractor này về chức năng đều giống nhau, chỉ khác về dữ liệu đặc tả đầu vào để
chúng có thể trích xuất ra được đúng thông tin cần thiết. Các đặc tả đầu vào này được thể hiện
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
24
thông qua các Action, chi tiết về khái niệm Action trong WDE sẽ được trình bày chi tiết ở
phần Hiện thực.
Hình 5-13. Extractor gồm có 3 Extractor con
5.4.3 Các Helper
Các helper trong CORE là các class hỗ trợ các chức năng cần thiết cho Robot, Crawler
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
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
26
6 Hiện thực
6.1 Môi trường phát triển ứng dụng
Hê điều hành: Microsoft Windows 7, Microsoft Windows XP.
Để có thể quản lý tiến trình của Robot, chương trình sử dụng một số hàm của hệ điều hành để
phục vụ cho việc này:
- tasklist.exe: theo dõi các process đang chạy.
- start.exe: thực thi lệnh, với thông số /B cho phép ứng dụng chạy ngầm
(background).
Ngôn ngữ lập trình:
- PHP: lập trình cho FRONT và CORE của chương trình.
- Java: xây dựng command-line Browser tương tác với chương trình.
- C#: chương trình XMLHelper hỗ trợ người dùng.
Nền tảng: Apache – MySQL – PHP, ở đây nhóm phát triển sử dụng XAMPP 1.7.2 với
các thành phần:
- PHP: phiên bản 5.3.0 với các Extension cần thiết để chạy: CURL, TIDY
- MySQL: phiên bản 5.1
Các môi trường thực thi cần thiết cho các chức năng bổ sung của chương trình (Không
bắt buộc):
- JRE (Java Runtime Environment): chạy Browser của chương trình.
- .NET Framework 3.5: chạy XMLHelper.
PHP Framework: CodeIgniter version 1.7.2, được thiết kế theo mô hình MVC, đơn
giản dễ sử dụng, ít tốn tài nguyên, hỗ trợ các chức năng cần thiết cho chương trình.
6.2 Giao diện sử dụng của WDE
Giao diện màn hình chính cũng là màn hình quản lý Robot:
TODO: Vẽ các Box mô 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
27
Hình 6-1. Giao diện chính của WDE
Giao diện màn hình chính gồm có 3 phần:
- Tab Menu: menu định vị các module của chương trình.
- Accordion Menu: menu định vị các chức năng của module.
- Grid View: các thông tin của module được thể hiện dưới dạng lưới.
Giao diện thay đổi / chỉnh sử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
28
Hình 6-2. Giao diện nhập / chỉnh sửa dữ liệu đặc tả đầu vào XML
Giao diện thay đổi / chỉnh sửa Robot gồm có các input:
- Name: tên của Robot.
- XML: cấu hình của Robot.
Màn hình quản lý dữ liệu:
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
29
Hình 6-3. Giao diện quản lý hoạt động Bot và xem dữ liệu trích xuất được
Màn hình dữ liệu gồm có:
- Grid chọn Robot để thể hiện dữ liệu của Robot.
- Thông tin về Bot: các thông tin về bot như tên, trạng thái, và các thời gian liên
quan.
- Dữ liệu của bot.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
30
6.3 Đặc tả dữ liệu đầu vào bằng XML (FOXROCK)
6.3.1 Cấu trúc tổng quát của file cấu hình XML
TODO
6.3.2 Chi tiết các thành phần (element)
TODO
6.4 Các action
6.5 Cấu trúc Database
Danh sách các bảng:
STT Tên Mô tả
1 wde_crawl Dữ liệu về Robot (Tên, Cấu hình, Trạng thái…)
2 wde_url Các link của các trang web mà Robot trích xuất dữ liệu
3 wde_log Quá trình hoạt động của Robot
4 wde_data_[num] Dữ liệu mà Robot thu thập được với [num] tương ứng
với ID của Robot, Cấu trúc của bảng phụ thuộc vào khai
báo của người sử dụng.
Chi tiết các bảng dữ liệu:
Bảng Robot (wde_crawl)
STT Tên cột Ý nghĩa Kiểu Miền GT Ghi chú
1 id Mã Robot int(11) Khóa chính
2 pid Mã quá trình (process
id) của Robot
int(11)
3 name Tên Robot varchar(256)
4 xml XML người dùng
nhập
text
5 settings Cấu hình Robot được text
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
31
phân tích từ xml
6 options Tùy chọn của Robot text
7 status Trạng thái Robot varchar(1) [R,S,P,E] R: Ready
S: Started
P: Paused
E: Error
8 start Thời gian robot được
kích hoạt gần nhất
int(11)
9 stop Thời gian robot được
hủy bỏ gần nhất
int(11)
10 pause Thời gian robot được
được tạm dừng gần
nhất
int(11)
11 last Thời gian robot cập
nhật dữ liệu lấy được
gần nhất
int(11)
12 created Thời gian robot được
tạo
int(11)
13 modified Thời gian robot được
chỉnh sửa gần nhất
int(11)
Bảng URL (wde_url)
STT Tên cột Ý nghĩa Kiễu dữ liệu Miền GT Ghi chú
1 id Mã URL int(11) Khóa chính
2 crawl_id Mã Robot int(11) Quan hệ với
bảng Robot
3 parent_id Mã URL cha int(11) Quan hệ với
bảng URL
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
32
4 pagination_id Mã URL phân trang int(11) Quan hệ với
bảng URL
5 hash MD5 Hash để kiểm
tra trùng
varchar(32)
6 url URL của trang text
7 level Cấp đô sâu của trang mediumint(8)
8 options Tùy chọn text
9 status Trạng thái varchar(1) [W,D] W: Wating
D: Done
10 child_status Trạng thái của trang
con
varchar(1) [W,D] W: Wating
D: Done
11 created Thời gian URL được
tạo
int(11)
12 modified Thời gian URL được
thay đổi
int(11)
Bảng Log (wde_log)
STT Tên cột Ý nghĩa Kiễu dữ liệu Miền GT Ghi chú
1 id Mã Log int(11) Khóa chính
2 crawl_id Mã Robot int(11) Quan hệ với
bảng Robot
3 message Thông tin Text
4 created Thời gian tạo log int(11)
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
33
6.6 Front
6.6.1 Bot Manager
Hình 6-4. Sơ đồ tuần tự của tác vụ start Bot
Hình 6-5. Sơ đồ tuần tự của tác vụ resume Bot
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
34
Hình 6-6. Sơ đồ tuần tự của tác vụ pause Bot
Hình 6-7. Sơ đồ tuần tự của tác vụ stop Bot
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
35
6.7 Core
Hình 6-8. Sơ đồ class giữa Robot - Crawler - Extractor
6.7.1 Robot
Class Robot đóng vai trò trung tâm điều khiển của Crawler và Extractor. Mọi hoạt động
của hai đối tượng này đều được điều khiển, phối hợp với nhau bởi 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
36
Crawler ExtractorRobot
load(bot_id)
load(content)
do_action(action)
save_data()
Loop
Hình 6-9. Sơ đồ tuần tự thể hiện quá trình hoạt động tổng quát của Robot
6.7.1.1 Quản lý tiến trình của Robot (Robot process)
Chạy Bot: Khi nhận được lênh kích hoạt từ người dùng thông qua Bot Controller,
Robot sẽ tiến hành thực hiện tuần tự các công việc sau:
- Cập nhật trạng thái của Robot thành đang hoạt động (Started).
- Kiểm tra xem Robot có đang được chạy hay không: Mỗi Robot sẽ được chạy trên
một process riêng biệt. Robot sẽ kiểm tra Process ID của Robot muốn có đang tồn
tại trong danh sách Process của Hệ điều hành hay không.
o Nếu không, Robot sẽ thực hiện một lênh khởi tạo một process mới để chạy
Bot được yêu cầu.
o Nếu có, Robot sẽ dừng lại.
Dừng Bot:
- Trong mỗi vòng lặp của quá trình hoạt động, Bot kiểm tra trạng thái của mình.
- Nếu trạng thái là “Started”, Bot sẽ tiếp tục chạy.
- Nếu trạng thái không là “Started”, Bot sẽ dừng lạ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
37
Việc tạo process mới để chạy và quản lý Robot bằng Process ID đã giúp khắc phục đáng
kể nhược điểm khách quan của ngôn ngữ PHP chính là timeout (trong PHP, khi một script
được chạy nó luôn có một thời gian giới hạn gọi là timeout, sau thời gian timeout này script sẽ
tự động ngừng chạy).
Để khắc phục tình trạng này, có 3 cách phổ biến nhất là:
Cách 1:
- Đặt lại thời gian chạy của PHP script: set_time_limit(0);
- Ưu điểm: Sau khi được đặt lại thời gian, script có thể chạy mãi mãi,
- Nhược điểm: Khó quản lý tình trạng hoạt động của script. Script mặc dù có thể
chạy mãi mãi, nhưng vẫn có thể dừng lại nếu gặp lỗi phát sinh, sự cố từ server hay
các nguyên nhân bất khả kháng. Người lập trình khó có thể kiểm tra được tình
trạng của script đó.
Cách 2:
- Dùng cron job của linux hay schedule tasks của windows để khắc phục tình trạng
timeout của script.
- Ưu điểm: Đảm bảo script luôn luôn được chạy sau một khoảng thời gian nhất định.
- Nhược điểm: Dễ xảy ra tình trạng script trước chưa dừng lại thì script sau lại hoạt
động, dễ xảy ra xung đột đối với nhau.
Cách 3:
- Kết hợp cả hai cách trên: Đặt thời gian chạy của Script và đặt thời gian chạy
cron/schedule task thích hợp.
- Ưu điểm: khắc phục được nhược điểm trên của hai cách trên.
- Nhược điểm: Script phải chạy và dừng liên tục. Có thể ảnh hưởng đến hiệu suất
hoạt động.
Nhận thấy những nhược điểm đó dễ ảnh hưởng đến hiệu quả chương trình, nhóm đã
nghiên cứu và đi đến giải pháp như sau:
Giải pháp quản lý tiến trình các Robot của nhóm:
- Đăt thời gian chạy cho bot là vô hạn.
- Đồng thời dùng cron/schedule để định thời gian thực thi bot.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
38
- Kết hợp với việc kiểm tra Process ID của bot để tránh được tình trạng một Bot
chạy song song nhiều hơn một lần.
6.7.1.2 Thực hiện quy trình thu thập dữ liệu
Class Robot điều khiển hai thành phần chính là Crawler và Extractor để tiến hành thu
thập dữ liệu, quá trình tổng quát nhìn từ mức cao sẽ có dạng như sau:
Hình 6-10. Quá trình thu thập dữ liệu tổng quát
TODO: Sequence Chart Here
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
39
Trong mỗi vòng lặp của quy trình hoạt động, Bot lần lượt sử dụng Crawler và Extractor
để tiến hành thu thập dữ liệu. Ban đầu, Bot sẽ lấy url từ cơ sở dữ liệu, dùng Crawler để lấy nội
dung trang Web, trả nội dung lấy được cho Extractor. Sau đó bot sẽ tiến hành duyệt qua các
Action và dùng Extractor để thực hiên chúng, Kết quả extractor trả về sẽ được Bot lưu giữ
trong cơ sở dữ liệu.
Như vậy có thể nói class Robot chính là trung tâm điểu khiển của Core, điều khiển mọi
hoạt động của Crawler và Extractor, giúp Crawler và Extractor phối hợp, đan xen với nhau để
quá trình thu thập dữ liệu tự động được hoàn thành.
6.7.2 Crawler
Class Crawler có nhiệm vụ lấy nội dung một trang web từ một url cùng các options và
trả về định nghĩa HTML của nó.
Hai crawler engine của Crawler:
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
40
Simple_Crawler
+ load(url: string): string
+ get_status(url: string): string
Advance_Crawler
+ load(url: string): string
+ get_status(): string
- generate_input()
- run_browser()
Abstract Crawler
# page_content: string
+ load(url: string): string
+ get_status(): string
Hình 6-11. Sơ đồ class của các Crawler
Hiện nay chương trình chỉ hỗ trợ sử dụng một trong hai crawler engine, người sử dụng
quyết định chọn lựa engine nào được dùng thông qua thẻ engine của đặc tả cấu hình XML.
6.7.2.1 Simple Crawler:
Hình 6-12. Sơ đồ tuần tự hoạt động của Simple Crawler
Sử dụng pHTML Helper, đây là một wrapper của thư viện cURL của PHP, có khả năng
thực hiện các chức năng HTTP cơ bản như: GET, POST, HTTP Auth …
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
41
Khai báo:
$crawler = new Simple_Crawler();
Lấy nội dung một trang bình thường
$crawler->load($url);
Lấy nội dung một trang có post, va http auth
$options = array(
‘post’ => array(
‘field1’ => ‘value1’,
‘field2’ => ‘value2’,
),
‘auth’ => array(
‘type’ => ‘basic’,
‘user’ => ‘user’,
‘pass’ => ‘password’,
)
);
$crawler->load($url, $options);
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
42
6.7.2.2 Advanced Crawler:
Hình 6-13. Sơ đồ tuần tự hoạt động của Advanced Crawler
6.7.2.2.1 wdeBrowser
Advanced Crawler sử dung wdeBrowser - một browser giả lập được viết bằng java do
nhóm thực hiện. Chương trình sử dụng thư viện HTMLUnit để giả lập một browser, có khả
năng thực hiện các đoạn mã javascript, activeX, java applet…
TODO: Mô hình Advance Crawler -> createInputFile -> run wdeBrowser ->
readInputFile -> loop do action -> write out put file -> crawler read output file -> return
content
Khi được cung cấp một url kèm theo các options mô tả các hoạt đông, Advanced
Crawler sẽ tạo một fileInput chứa các hoạt động đó, sau đó sẽ gọi wdeBrowser với thông số là
input và output, wdeBrowser sẽ thực hiện các action được truyền qua và lấy nội dung cuối
cùng ghi vào file output, cũng là file chứa nội dung trang Web cần lấy.
wdeBrowser nhận 2 thông số là tập tin đầu vào và tập tin đầu ra.
java –jar wdeBrowser input.txt output.html
Khi thực thi, wdeBrowser sẽ tiến hành đọc nội dung của file input, thực hiện các action
được miêu tả trong đó. Sau đó ghi kết quả cuối cùng ra file output.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
43
Cấu trúc file input
url trang web
action block
action block
…
Mỗi action block được miêu tả bằng 3 thành phần nằm trên 3 dòng riêng biệt:
Action Type: loại action. Hiện chương trình hỗ trợ hai loại action cơ bản:
- Type: thực hiện thao tác nhập giá trị value vào trong target
- Click: thực hiện thao tác click chuột vào target. Value của Action lúc này chính là
option của thao tác:
o Nếu Value: “auto”: chương trình sẽ thực hiện tự động đồng bộ trang web
sau khi click vào đối tượng nếu xảy ra ajax (hiện tại hoạt động chưa chính
xác)
o Nếu Value là số, chương trình đợi một khoảng thời gian là Value trước khi
thực hiện bước tiếp theo hoặc trả về kết quả sau cùng.
o Nếu Value có dạng “[event]xpath”:
Nếu event là “change”: chương trình sẽ đợi cho đến khi phần tử
element được lấy bởi xpath thay đổi hoặc khi event timeout (5s).
Target: đối tượng tác động của action. Target có dạng: [type] search. Hiện chương
trình hỗ trợ 3 kiểu tìm kiếm là:
- Nếu type là “name” thì chương trình sẽ tìm kiếm phần tử có thuộc tính name là
search
- Nếu type là “id” thì chương trình sẽ tìm kiếm phần tử có thuộc tính id là search
- Nếu type là “xpath” thì lúc này giá trị của search phải có dạng [number]xpath,
chương trình sẽ thực hiện tìm kiếm các phần tử thỏa biểu thức xpath và lấy phần tử
thứ number trong các phần tử tìm kiếm được.
Value: giá trị hoặc option của action.
6.7.2.2.2 Ví dụ
Ví dụ 1:
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
44
Tập tin input của wdeBrowser:
type
[name]q
project
click
[name]btnG
0
Chương trình sẽ load trang sau đó thực hiện nhập chuỗi “project”
vào khung search của google, và click chuột vào nút search để lấy nội dung trang kết quả trả
về.
Ví dụ 2:
Tập tin input của wdeBrowser
click
[xpath][0]//img[@src="images/next_rounded_sidebar2.gif"]
[change]//body
Chương trình thực hiện load trang web, sau đó click vào nút phân trang ajax và đợi cho
đến khi body thay đổi (nghĩa là trang web đã load xong ajax).
6.7.3 Extractor
Class Extractor có nhiệm vụ bóc tách dữ liệu từ nội dung trang web mà crawler trả về
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
45
Expression_Extractor
- page_content: string
+ load(page_content: string)
+ capture(template: string)
Xpath_Extractor
- page_dom: DOMDocument()
+ load(page_content: string)
+ capture(template: string)
- query(template)
Extractor
+ expression: Expression_Extractor();
+ xpath: Xpath_Extractor()
+ selector: Selector_Extractor();
+ load(content: string)
+ do_action(action: array)
- capture(template): string
- block(template): string
Selector_Extractor
- page_doc: phpQueryObject()
+ load(page_content: string)
+ capture(template: string)
Abstract_Extractor
-
+ load(page_content: string)
+ capture(template: string)
Name
Hình 6-14. Sơ đồ class của các Extractor
Hiện nay chương trình hỗ trợ xử lý bằng nhiều input khác nhau.
6.7.3.1 Expression Extractor
Sử dụng Perl Expression để lấy dữ liệu
Extractor thưc hiện match các expression trực tiêp từ input do crawler tạo ra.
Ví dụ:
/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6})/s
Extractor sẽ thực hiện lệnh match expression với nội dung trang web hiện tại, kết quả trả
về là danh sách địa chỉ email.
6.7.3.2 XPath Extractor
Sử dụng XPATH để lấy dữ liệu thông qua hai helper pDOM và pXPATH.
Khác với Expression Extractor, XPATH cần phải được thực hiện các bước chuyển đổi
từ input do crawler tạo ra trước khi query lấy dữ liệu.
Luận văn tốt nghiệp Xây dựng ứng dụng thu thập dữ liệu web tự động
46
TODO: Diagram
Khi thực hiện lệnh load, Extractor tạo một DOMDocument bằng pDOM, và từ
DOMDocument đó tạo một DOMXPath để query dữ liệu
Ví dụ:
//div[@class=”title”]|
Extractor sẽ thực hiện lệnh query trên DOMDocument hiện tại, tìm kiếm các div có thuộc tính
class là title.
6.7.3.3 Selector Extractor
Sử dụng cú pháp jquery selector để lấy dữ liệu dưới sự hỗ trợ của thư viện phpQuery.
jQuery là một javascript framework đang được sử dụng khá rộng rãi trong các ứng dụng
Web trong thời gian gần đây. jQuery cung cấp chức năng jQuery Selector - một cách thức tìm
kiếm các phần tử trên trang web dựa vào cú pháp CSS. Cộng đồng người sử dụng PHP cũng
đã xây dựng nên phpQuery - một thư viện dành cho PHP, đem lại các tính năng của jQuery
vào ngay trong code PHP.
Mỗi template của selector có dạng: expression | function:argument. Trong đó expression
là mẫu tìm kiếm, function là hàm thực hiện với tham số argument sau khi tìm kiếm.
Sau khi phpQuery thực hiện tìm kiếm phần tử thỏa mản expression, kết quả trả về là một
tập hợp các phpQuery object, Extractor sẽ tiếp tục thực hiên function trong action trả về các
giá trị tương ứng. Hiện nay Extractor hỗ trợ 4 function:
attr: lấy thuộc tính.
value: lấy giá trị.
html: lấy nội dung html.
text: lấy nội dung text.
Ví dụ:
a.title_link|attr:href
Extractor sẽ thực hiện lệnh select trên văn bản hiện tại, kết quả trả về là các anchor có class là
“title_link”, sau đó sẽ lấy thuộc tính href của anchor.
Các file đính kèm theo tài liệu này:
- report_development_merge_2435.pdf