Chương 1 CƠ SỞ LÝ THUYẾT
2.4. Thành phần tự động lấy dữ liệu
Thành phần tự động lấy dữ liệu là một mô-đun với nhiệm vụ: tìm kiếm, phân tích và tải về các trang web một cách tự động theo một trình tự tối ưu.
Thành phần tự động lấy dữ liệu là thành phần cơ bản không thể thiếu được trong hệ thống.
2.4.1. Cách thức hoạt động của các thành phần tự động lấy dữ liệu Thành phần tự động lấy dữ liệu thực thi tự động tìm kiếm, thu thập/lấy tất cả các dữ liệu trên Web như hình ảnh (image), văn bản (text), video, và thậm chí là các tệp tin như .doc, .pdf…thông qua các địa chỉ URL cho trước. Thuật toán của thành phần tự động lấy dữ liệu được minh họa trong hình 2.2.
Hình 2.2. Thuật toán tự động thu thập dữ liệu từ các URL cho trước Trong đó:
- Thành phần tự động lấy dữ liệu thực hiện theo cơ chế tuần tự.
+ Tự động lấy các trang web, xác định địa chỉ server của website đã lấy (đồng thời chứa danh sách các URL chưa được lấy).
+ Trích xuất văn bản và link từ trang web đã lấy.
+ Loại bỏ các URL trùng lặp và lặp lại duyệt các URL tiếp theo.
+ Hết URL, kết thúc lưu vào cơ sở dữ liệu.
Cơ chế thực thi của thành phần tự động lấy dữ liệu: ban đầu thành phần tự động lấy dữ liệu được khởi tạo bởi 1 địa chỉ URL. Sau đó, thành phần tự động lấy dữ liệu sẽ thực hiện quá trình thu thập dữ liệu và tìm kiếm các hyperlink (URL con) trong trang web và lưu các hyperlink. Các URL sẽ được duyệt đệ quy theo các ràng buộc đã định nghĩa sẵn. Vì độ sâu của các URL đôi khi rất lớn, nên việc hạn chế duyệt để lấy dữ liệu có thể phụ thuộc vào người dùng.
Với một chương trình, thành phần tự động lấy dữ liệu thông thường nó chỉ lưu trữ những trang web và dữ liệu mà nội dung của nó thỏa mãn những tiêu chí đã được cấu hình sẵn (thông thường được biểu diễn qua các tên thẻ (tag name)).
2.4.2. Thuật toán của thành phần tự động lấy dữ liệu được mô tả như sau
Start_URL = “http://www.baomoi.com”;// Ví dụ một URL cụ thể List_of_URLs ={}; //khởi gán danh sách
append(List_of_URLs,Start_URL); //thêm URL vào danh sách while (notEmpty(List_of_URLs)) {
foreach URL_in_List in (List_of_URLs) { if (URL_in_List is_of HTTProtocol) {
if (URL_in_List permits_robots(me)){
Content=fetch(Content_of(URL_in_List));
Store(someDataBase,Content); //Lưu dữ liệu vào CSDL
if (isEmpty(Content) or isError(Content){
skip to next_URL_in_List;
} //if else {
URLs_in_Content=extract_URLs_from_
Content(Content);
append(List_of_URLs,URLs_in_Content)
;
} //else } else {
discard(URL_in_List);
skip to next_URL_in_List;
}
if (stop_Crawling_Signal() is TRUE) { break; } } //foreach
} //while
Quá trình duyệt và tìm kiếm các hyperlink (URL con) được thực hiện tìm kiếm theo thuật toán ưu tiên theo chiều rộng hoặc chiều sâu.
2.4.2.1. Thuật toán tìm kiếm ưu tiên theo chiều rộng (Breadth First Crawler)
Thuật toán tìm kiếm ưu tiên theo chiều rộng được minh họa trong hình 2..3.
Hình 2.3. Thuật toán tìm kiếm ưu tiên theo chiều rộng
Thuật toán được mô tả như sau:
Bước 1: Nhận về tất cả các link từ trang bắt đầu và đặt tất cả trong 1 hàng đợi.
Bước 2 : Lấy ra URL đầu tiên trong hàng đợi, tìm ra toàn bộ link con của URL này cho vào hàng đợi.
Bước 3: Thực hiện lặp lại bước 2 cho đến khi hàng đợi rỗng
2.4.2.2. Thuật toán tìm kiếm ưu tiên theo chiều sâu (Depth First Search) Thuật toán tìm kiếm ưu tiên theo chiều sâu được minh họa trong hình 2.4.
Hình 2.4. Thuật toán tìm kiếm ưu tiên theo chiều sâu
Thuật toán được mô tả như sau:
Bước 1 : Nhận về link đầu tiên chưa thăm từ trang bắt đầu.
Bước 2 : Thăm link và nhận về sub-link đầu tiên chưa thăm của link này Bước 3 : Lặp lại bước 2 cho tới khi hết sub-link chưa thăm.
Bước 4 :Thăm tới link chưa thăm đầu tiên từ dưới lên. Lặp lại bước 2.