Cấu trúc tổng quát của file cấu hình XML

Một phần của tài liệu LUẬN VĂN XÂY DỰNG ỨNG DỤNG THU THẬP DỮ LIỆU WEB ĐỘNG (Trang 30 - 46)

5 Thiết kế

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

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

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

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-6. Sơ đồ tuần tự của tác vụ pause Bot

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

Crawler Extractor Robot 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.

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.

- 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

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

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

 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);

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.

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

Tập tin input của wdeBrowser: http://google.com type [name]q project click [name]btnG 0

Chương trình sẽ load trang http://google.com, 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

http://comic.vuilen.com/ 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

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ụ:

<expression>/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6})/s</expression>

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

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ụ:

<xpath>//div[@class=”title”]|</xpath>

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ụ:

<selector>a.title_link|attr:href</selector>

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à

Một phần của tài liệu LUẬN VĂN XÂY DỰNG ỨNG DỤNG THU THẬP DỮ LIỆU WEB ĐỘNG (Trang 30 - 46)

Tải bản đầy đủ (PDF)

(46 trang)