Để thu thập dữ liệu từ trang web wikiHow, tôi đã xây dựng một công cụ (sau đây tôi gọi là web-crawler) có chức năng thu thập tất cả các đường link của các bài viết có trên trang web
https://wikihow.vn. Với những đường link đó, công cụ này sẽ tải dữ liệu của bài viết về và
thực hiện trích xuất các thông tin của bài viết đểlưu trữvào cơ sở dữ liệu.
Để trích xuất được các thông tin của trang web, web-crawler đã sử dụng thư viện Jsoup. Đây là một thư viện của Java, chúng làm việc với dữ liệu html. Jsoup cung cấp rất nhiều API phục vụ cho việc kéo và trích xuất dữ liệu từ các website một cách linh hoạt, thuận tiện và được sử dụng tốt với phương thức HTML5 DOM và CSS selectors. [15]
34
Để có thể lấy được các đường dẫn (link) của các bài viết một cách đầy đủ nhất, web-crawler sẽ tạo ra một queue để lưu trữ các đường link mà công cụ đã khám phá ra được trong wikiHow. Các phần tử trong queue sẽ có thông tin về url của website và kiểu của url. Kiểu của url được phân thành các dạng sau:
- Category: đây là đường dẫn của các chuyên mục, như được nói ở phần giới thiệu của wikiHow thì nó sẽ bao gồm 19 chuyên mục lớn về các lĩnh vực trong đời sống như: Nghệ thuật Giải trí, Xe hơi và Phương tiện Khác, Máy tính và Điện tử, Giáo dục và Truyền thông, Cuộc sống Gia đình…
- Page: trong mỗi chuyên mục thì thường sẽ có rất nhiều các bài viết, vì vậy wikiHow sẽ sắp xếp các bài viết này thành từng trang một và mỗi trang thì thường sẽ bao gồm nhiều nhất là 80 tiêu đề bài viết trong chuyên mục đó, và có 1 hoặc nhiều trang, tùy vào số lượng các bài viết trong chuyên mục.
- Article: đây là đường dẫn trực tiếp đến bài viết. Và sẽ là nơi chúng ta có thể lấy được thông tin đầy đủ về nội dung của bài viết.
Khởi tạo queue trên, công cụ sẽ cho vào tất cả 19 đường link của 19 chuyên mục chính trong wikiHow và được mang kiểu là category. Ta thực hiện thu thập các đường dẫn trực tiếp đến bài viết bằng cách lấy lần lượt các phần tử trong queue bên trên, nếu như phần tử được lấy ra khỏi queue:
- Có kiểu category: chúng ta sẽ sử dụng Jsop để trích xuất thông tin nội dung của trang web theo url đã lưu.
o Nếu như nhận thấy chuyện mục đó chỉ bao gồm một trang thì chúng ta sẽ tạo một bản sao(clone) từ phần tử đó và chuyển thành kiểu page và url giữ nguyên. Sau đó đẩy phẩn tử mới này vào queue.
o Nếu như chuyên mục có nhiều trang thì chúng ta sẽ lần lượt phép duyệt với một biến tăng dần rồi thay đổi tham số trên url để xem chuyên mục có bao nhiêu trang. Vòng lặp sẽ dừng khi mà biến tăng dần sẽ tạo ra một url mà trang web không tồn tại. Ví dụ: khi ta có chuyên mục “Máy tính và điện tử” có link chuyên mục là:
35 ta sẽ duyệt lần lượt các url:
https://www.wikihow.vn/Thể_loại:Máy-tính-và-Điện-tử?pg=1 https://www.wikihow.vn/Thể_loại:Máy-tính-và-Điện-tử?pg=2 https://www.wikihow.vn/Thể_loại:Máy-tính-và-Điện-tử?pg=3
…
Đến khi tham số pg trong url sẽ tạo ra một link không có nội dung. Khi đó sẽ là giới hạn của số trang trong chuyên mục hiện tại. Và tương tự như trên, ta sẽ tạo ra các phần tử mới có kiểu là page và url là các url bên trên. Sau đó đẩy phẩn tử mới này vào queue.
- Có kiểu page: khi download source code của trang web tương ứng với url của phần tử này, chúng ta sẽđược một danh sách các url của các bài viết có dạng như sau:
https://www.wikihow.vn/Lưu-tập-tin-vào-USB
https://www.wikihow.vn/Thay-đổi-ngôn-ngữ-mặc-định-trong-Google-Chrome https://www.wikihow.vn/Thay-đổi-quốc-gia-trên-YouTube
Với mỗi url trên ta sẽ tạo một phần tử có kiểu article và url tương ứng và cho vào trong queue.
- Có kiểu article: chúng ta sẽ giữ nguyên (có thể clone ra một phần tử tương ứng để push vào queue).
36
Hình 16: Mô tả luồng hoạt động của cơ chế thu thập dữ liệu trên wikiHow
Sau khi đã có tất cả các url của tất cả bài viết trên wikiHow, web-crawler sẽ tiến hành kéo nội dung của trang web về và trích xuất thông tin. Các thông tin mà chúng ta có thể thu thập được từ một bài viết thường sẽ là:
- Tiều đề bài viết, được nằm ở phía trên cùng của trang web. Sau đó sẽ là nội dung tóm tắt hoặc mô tả về bài viết (phần đánh dấu số 1 trong ảnh 18).
- Các phương pháp để thực hiện (phần đánh dấu số 2 trong ảnh 18).
- Với mỗi phương pháp thì sẽ có một bài bước tiến hành được mô tả cụ thể và kèm với đó có thể là hình ảnh (phần đánh dấu số 3 trong ảnh 18).
37
Hình 17: Bố cục của bài viết trên wikiHow
Sau khi trích xuất được nội dung của bài viết, bước tiếp theo sẽ là lưu trữ dữ liệu vào trong cơ sở dữ liệu. Cấu trúc dữ liệu sẽ bao gồm ba bảng chính:
- article: lưu thông tin chung của bài viết:
38
o summarization: mô tả ngắn gọn của bài viết.
o warning: các lưu ý.
o recommendation: một số lời khuyên.
- method: lưu thông tin chung của các phương pháp trong bài viết:
o article_id: id của bài viết (article).
o title: tiêu đề của phương pháp.
o summarization: mô tả ngắn gọn của phương pháp. - step: lưu thông tin các bước trong mỗi phương pháp thực hiện:
o mehod_id: id của phương pháp (method).
o title: mô tả chính về bước thực hiện.
o content: cách thực hiện cụ thể.
o image_url: đường dẫn ảnh minh họa trong bước thực hiện.
Hình 18: Cấu trúc lưu trữ dữ liệu bài viết của wikiHow trên database