Hình 2-7. Quá trình hoạt động tổng quát của ROBOT

Một phần của tài liệu Ứng dụng Xây dựng hỗ trợ nhập liệu Tìm hiểu khai thác dữ liệu từ web (Trang 44 - 55)

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.

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.

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 phân tích 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 bằng cách sử dụng XPath.

Các Helper

Các helper trong back-end 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

• 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

CHƯƠNG 3. HIỆN THỰC ỨNG DỤNG VÀ ĐÁNH GIÁ KẾT QUẢ

1.7 ĐẶC TẢ DỮ LIỆU ĐẦU VÀO BẰNG XML

Tập tin cấu hình XML cĩ thành phần gốc (root element) là cặp thẻ <site></site>, tất cả các thẻ khác đều nằm trong cặp thẻ này. Các thẻ con của site cĩ thể chia làm ba phần sau:

• Phần đặc tả thơng tin chung cho Robot

• Phần đặc tả các trang (một hoặc nhiều trang, thứ tự khai báo theo độ sâu của trang)

• Phần đặc tả bảng cơ sở dữ liệu

1.7.1 ĐẶC TẢ THƠNG TIN CHUNG CHO ROBOT

Phần này khai báo những thơng tin cần thiết cho Bot như: URL bắt đầu, crawler engine và các tùy chọn khác cho Bot. Cụ thể gồm các phần tử sau:

• <start></start>: chỉ ra URL mà khi khởi động Bot sẽ crawl đến đầu tiên. Đây là phần tử bắt buộc phải cĩ.

• <engine></engine>: chỉ ra crawler engine mà người sử dụng muốn dùng với Bot. Cĩ hai lựa chọn là simple và advanced tương ứng với Simple crawler engine và Advanced crawler engine. Nếu khơng khai báo cặp thẻ này, Bot sẽ mặc định hiểu ngầm là dùng Simple crawler engine.

• <options></options>: trong thẻ này người dùng sẽ đặc tả các tùy chọn bổ sung cho Bot, gồm cĩ 3 tùy chọn hữu ích:

- <sleep></sleep>: nội dung của thẻ này là một số nguyên khơng âm, xác định thời gian (tính bằng giây) giữa hai lần gửi yêu cầu đến máy chủ web liên tiếp. Sử dụng tùy chọn này để Bot cĩ thể tránh được các kỹ thuật kiểm tra và ngăn chặn các IP tải trang web liên tục (chống flood) của một số website. Ví dụ: <sleep>2</sleep>

- <proxy></proxy>: cũng như trường hợp của sleep, nếu trang web cĩ khả năng chống flood, mà người sử dụng khơng muốn đợi lâu, ta cĩ thể sử dụng proxy để chạy Bot. Nội dung của thẻ này ở dạng IP:port, cĩ thể cĩ nhiều proxy phân cách bằng dấu phẩy, khi đĩ các proxy sẽ được sử dụng luân phiên sau mỗi lần tải trang web. Ví dụ: <proxy>222.253.102.93:8888, 222.253.102.92:8080</proxy>

- <auth></auth>: nếu trang web yêu cầu người dùng đăng nhập để xác thực, ta cĩ thể sử dụng tùy chọn này để Bot cĩ thể tự đăng nhập trước khi tiến hành thu thập dữ liệu. DESS hỗ trợ hai kiểu xác thực đĩ là HTTP- Authentication (Basic) và Form-based Authentication (dựa vào web form). Ví dụ: o Với HTTP-Authentication: <auth> <type>basic</type> <user>username</user> <pass>password</pass> </auth>

o Với đăng nhập bằng Form: <auth>

<type>form</type> (adsbygoogle = window.adsbygoogle || []).push({});

<url>url đăng nhập</url> <field> <name>user</name> <value>username</value> </field> <field> <name>pass</name> <value>password</value> </field> </auth> 1.7.2 ĐẶC TẢ CÁC TRANG

Đây là phần quan trọng nhất của cấu hình Bot, phần này sẽ chỉ ra cách thức, hay nĩi đúng hơn là dẫn đường cho Crawler và Extractor hoạt động, tự động chuyển trang,

tải nội dung trang mới, tự động bĩc tách, trích xuất đúng phần dữ liệu người dùng mong muốn. Cĩ thể đặc tả một hoặc nhiều các cặp thẻ <page></page> thể hiện cho các cấp trang của website. Mỗi cặp thẻ page cĩ một cấp duy nhất, cấp của các trang được khai báo phải bắt đầu từ 1 và tăng dần liên tục nếu như cĩ nhiều hơn một trang. Cĩ các yếu tố cần quan tâm đến việc đặc tả trong một cấp trang cụ thể: cách vào những trang phân trang cùng cấp với trang đang xét, cách vào những trang con (những trang detail theo mơ hình master-detail) của trang đang xét, cách lấy ra các nội dung cần trích xuất từ nội dung HTML của trang đang xét. Sau đây là các thành phần con của phần tử page.

• <level></level>: số nguyên dương lớn hơn 0, duy nhất, bắt đầu từ 1 và tăng dần theo thứ tự xuất hiện trong khai báo, thể hiện cho cấp của trang web.

• <pagination></pagination>: đặc tả về phân trang như cách thức vào những trang phân trang từ trang đang xét, giới hạn các trang phân trang

• <subpage></subpage>: đặc tả về các trang con như cách thức vào những trang con từ trang đang xét, giới hạn các trang con

• <data></data>: đặc tả về các phân vùng dữ liệu cần trích xuất trong trang đang xét

Các thành phần pagination và subpage cùng cĩ chung một thẻ con là <limit></limit>, thẻ này cho biết số trang tối đa mà Crawler của DESS sẽ tải về. Cả ba thành phần pagination, subpage và data cùng sử dụng các Action để chỉ ra cách thức chuyển trang cũng như cách thức trích xuất dữ liệu.

Mỗi action thể hiện cho một tác vụ cơ bản cần thiết cho Crawler hoặc Extractor, được Robot thực hiện tuần tự. Các action cũng cĩ thể lồng nhau tùy theo một số trường hợp. Cĩ 5 loại action trong DESS, tùy thuộc vào giá trị của phần tử type trong action:

Capture Action: <type>capture</type>

Đây là action thể hiện việc trích xuất một phân vùng dữ liệu nào đĩ, được thực hiện bởi Extractor. Capture action gồm các thành phần sau:

- <name></name>: tên định danh cho phân vùng dữ liệu trích xuất được. Ví dụ “title”, “description”

- <list></list>: cĩ hai giá trị là Y và N, cho biết rằng capture action này khi trích xuất sẽ trả về một hay nhiều data record.

- <xpath></xpath: biểu thức dùng để xác định phân vùng dữ liệu cần trích xuất, ở dạng biểu thức XPath.

- <helper></helper>: xác định các helper-function dùng để hậu xử lý dữ liệu sau khi lấy được từ nội dung trang web (lưu ý rằng các dữ liệu này đều ở dạng text). Các helper được phân cách bằng ký tự “|”. Người sử dụng cĩ thể tự định nghĩa nên các helper-function này bằng cách viết các hàm riêng cho mình. DESS cung cấp 6 helper-function được xây dựng sẵn:

o trim: cắt bỏ các khoảng trắng thừa ở đầu và cuối chuỗi

o replace: cú pháp replace:a,u cĩ ý nghĩa thay thế tất cả sự xuất hiện của “a” trong chuỗi thành “u”

o entity: chuyển các ký tự đặc biệt thành HTML entity, ví dụ & chuyển thành &amp;

o strip: lọc bỏ hết tất cả các tag

o space: thay thế tất cả các chuỗi nhiều khoảng trắng thành một khoảng trắng duy nhất

o content: bỏ tag đĩng và tag mở, chỉ lấy nội dung bên trong

- <static></static>: dùng thẻ này khi ta muốn action capture trả về đúng chuỗi giá trị trong thẻ, chứ khơng trích xuất dữ liệu từ trang web. Thẻ này được dùng trong các trường hợp dùng capture action làm parameter giá trị cố định cho GET, POST (xem ví dụ của Link Action bên dưới). Khi dùng thẻ này thì khơng được phép cĩ các thẻ xpath, expression, selector và list phải là N.

Khi trên trang web đang xét cĩ nhiều phân vùng dữ liệu khác nhau và ta muốn các data record của các phân vùng này được gom nhĩm lại với nhau vào chung một data record lớn cĩ nhiều field, ta cần dùng block action. Block action sẽ bao bọc nhiều capture action con, bản thân block action sẽ trả về một hoặc nhiều phân vùng dữ liệu “cha chung” của các phân vùng dữ liệu con (gọi là các block data). Block action cĩ các thẻ sau:

- <list></list>: giá trị Y hoặc N, xác định rằng block action này trả về một hay nhiều block data (mỗi block data này chứa các phân vùng dữ liệu con) - <xpath></xpath>: tương tự Capture Action

Các biểu thức XPath của các Capture Action con sẽ phải là tương đối với nội dung của block data.

Link Action: <type>link</type>

Các Link Action trả về danh sách các URL cĩ được nhờ biểu thức tìm kiếm XPath, Expression, Selector tương tự như các action trên. Tuy nhiên Link Action cũng cho phép gửi kèm theo các tham số vào URL, theo phương thức HTTP GET hoặc HTTP POST, thơng qua thành phần options, ví dụ:

<action> <type>link</type> <static>http://www.example.com/index.aspx</static> <options> <get> <action> <type>capture</type> <name>id</name> <static>SW063</static> </action> </get> </options> </action>

Trong ví dụ trên, thẻ static cũng được dùng cho Link Action và cĩ tác dụng tương tự thẻ static của Capture Action. Ví dụ trên sẽ thể hiện cho thao tác gửi một yêu cầu HTTP POST đến http://www.example.com/index.aspx kèm theo tham số id cĩ giá trị

“SW063”. Một ví dụ khác mà tham số truyền cĩ giá trị được trích xuất từ nội dung trang web: <action> <type>link</type> <static>http://www.example.com/index.aspx</static> <options> <post> <action> <type>capture</type> <name>__EVENTTARGET</name> <expression>/WebForm_PostBackOptions\("([a- z0-9\$_]*next)"/s</expression> </action> </post> </options> </action> (adsbygoogle = window.adsbygoogle || []).push({});

Type Action: <type>type</type>

Type Action thể hiện thao tác nhập chuỗi ký tự vào một điều khiển nào đĩ (một textfield, một textarea, v.v..) cho phép nhập liệu (target). Giá trị nhập vào được thể hiện trong thẻ value, cịn target thể hiện bằng thẻ static hoặc xpath. Nếu dùng thẻ static thì giá trị của nĩ phải ở dạng [name]name_to_search hoặc [id]id_to_search. Ví dụ sau sẽ thể hiện thao tác nhập giá trị “minh” vào điều khiển cĩ name là q. Nếu dùng thẻ xpath thì action sẽ nhập giá trị vào điều khiển tìm được bởi biểu thức XPath.

<action>

<type>type</type>

<static>[name]q</static> <value>minh</value> </action>

Click Action thể hiện thao tác click chuột vào một điều khiển chẳng hạn một nút bấm button. Action cũng hỗ trợ tìm kiếm target bằng name, id hoặc bằng XPath. Ví dụ sau thể hiện thao tác click chuột vào một điều khiển cĩ name là btnG.

<action>

<type>click</type>

<static>[name]btnG</static> <value>1</value>

</action>

Năm loại Action trên cĩ thể kết hợp với nhau, lồng nhau để cĩ thể giải quyết những trường hợp từ đơn giản cho đến phức tạp. Tuy nhiên, Simple crawler engine chỉ sử dụng Link Action, Capture Action và Block Action, trong đĩ Simple crawler sử dụng các Link Action để chuyển trang, Extractor sử dụng Capture Action và Block Action để trích xuất dữ liệu. Đối với Advanced crawler engine, chỉ cĩ Click Action, Type Action, Capture Action và Block Action là cĩ thể sử dụng, trong đĩ Advanced crawler sử dụng Click Action và Type Action (thơng qua HtmlInput) để giả lập browser, thực thi JavaScript, cịn Extractor sử dụng Capture Action và Block Action giống như Simple crawler engine.

1.7.3 ĐẶC TẢ BẢNG CƠ SỞ DỮ LIỆU

Phần này gồm một element duy nhất, đĩ là thẻ <database></database>. Thẻ này đặc tả metadata của bảng trong cơ sở dữ liệu dùng để chứa các dữ liệu trích xuất được bởi Bot. Cụ thể là đặc tả các field của bảng thơng qua một hoặc nhiều cặp thẻ <column></column>. Mỗi thẻ column đại diện cho một field trong bảng cơ sở dữ liệu, mỗi column cĩ một thẻ con <name></name> thể hiện tên của column, một thẻ con <type></type> xác định kiểu dữ liệu của column và một thẻ <constraint></constraint> thể hiện ràng buộc dữ liệu của field.

Tất cả các dữ liệu trích xuất được của DESS sẽ được lưu vào bảng này. Tên của bảng sẽ được sinh tự động và là duy nhất đối với mỗi Bot. Mỗi dữ liệu cần trích xuất được đặc tả trong thẻ data đã được định danh bằng thẻ name trong capture action tương ứng, và chúng sẽ được lưu vào một field tương ứng trong bảng. Người sử dụng

phải dùng các tên định danh của các data này làm tên các column để DESS cĩ thể biết mỗi dữ liệu trích xuất được cần lưu vào field nào của bảng.

Ví dụ sau đây đặc tả bảng cơ sở dữ liệu của Bot gồm 2 field, tương ứng với 2 phần dữ liệu cần trích xuất cĩ tên định danh title và description.

<database> <column> <name>title</name> <type>varchar</type> <constraint>100</constraint> </column> <column> <name>description</name> <type>varchar></type> <constraint>500</constraint> </column> </database>

1.8 CẤU TRÚC CƠ SỞ DỮ LIỆU

Hình 3-8. Sơ đồ cấu trúc cơ sở dữ liệu của chương trình

Một phần của tài liệu Ứng dụng Xây dựng hỗ trợ nhập liệu Tìm hiểu khai thác dữ liệu từ web (Trang 44 - 55)